2016-04-15 15 views
0

古いテキスト素材をたくさん処理しています。多くの場合、OCRプロセスは "。"言い換えれば、例えば、「t.h.i.s i.s a test」である。これらのドットを空のスペースに置き換えたいのです。しかし、私は文の終わりを示す点を取り除きたいとは思わない。だから私は、文字/ドット/文字を探して、ドットを何も置き換えない正規表現を探しています。R:文字列内の2文字間のドットを置き換える方法

test <- "t.h.i.s i.s a test." 
    gsub(test, pattern="\\w[[:punct:]]\\w", replacement="") 

しかし、これは結果

". a test." 

任意の提案が高く評価されています。

+2

このアプローチは良くありません。「5.6」があればどうなりますか? –

+0

[ここから](http://stackoverflow.com/questions/8747671/regex-remove-all-matches-leaving-the-last): 'gsub(" [\\。](?!\\ d * $ ) "、" "、test、perl = TRUE)'が動作します。正規表現に精通している人が理由を説明できるのでしょうか? (私はできません) –

答えて

0
paste0(gsub('\\.', '', test), '.') 
#[1] "this is a test." 

以上の文章で動作するように、これは醜いようにするには、

paste(paste0(gsub('\\.', '', unlist(strsplit(test, '\\. '))), '.'), collapse = ' ') 
#[1] "this is a test. With another sentence." 
+0

そして、入力文字列にいくつかの文がある場合は? –

+1

'' T.h.i.sは米国の州です。 "私は現在の問題に対して100%安全な解決策があるとは思わない。 –

+0

私はあなたが正しいと思います。特に小数点がある場合は...コメントで述べたように – Sotos

2

あなたは、文字列の真ん中にドットではない文ですべてのものを抽出すなわち、反対の操作を行うことができます。

require(stringr) 
test <- "t.h.i.s i.s a test." 
paste0(str_extract_all(test, "[^\\.]|(\\.$)")[[1]], collapse = "") 

[1] "this is a test." 

複数の文章の可能性を含める場合は、ドットの後にスペースを入れることができます。

ここでは
test <- "t.h.i.s i.s a test. With a.n.other sen.t.ence." 
paste0(str_extract_all(test, "[^\\.]|(\\.$)|(\\.)")[[1]], collapse = "") 

[1] "this is a test. With another sentence." 
+0

「T.h.i.sはアメリカの州です」と試してみてください。私は現在の問題に対して100%安全な解決策があるとは思わない。 –

+0

ありがとうございます。 gsub関数でこれを行う方法を教えてください。私はlapplyを使用して多数のテキストにgsubを使用し、paste0を使用してすべてが単一のテキストになります。しかし、あなたの提案を正しいlapplyコマンドに変換する方法がわかりません。私が今使っているのはlapply(text、gsub、pattern = "ここに入れるもの"、replacement = "")です。 – user3604060

2

さらにパターンを強化する方法についての提案が私の最高の推測です、そして:

  • \b((?:U[.]S|etc|M(?:r?s|r))[.]|\d+[.]\d+) - 試合:

    > test = "T.h.i.s is a U.S. state. I drove 5.5 miles. Mr. Smith know English, French, etc. and can drive a car." 
    > gsub("\\b((?:U[.]S|etc|M(?:r?s|r))[.]||\\d+[.]\\d+)|[.](?!$|\\s+\\p{Lu})", "\\1", test, perl=T) 
    [1] "T.h.i.s is a U.S. state. I drove 5.5 miles. Mr. Smith know English, French, etc. and can drive a car." 
    

    regex demo

    説明を参照してください。 rの中の逆参照で\1で復元する例外置き換え部分。この部分は、U.S.に一致etc.Mr.Ms.Mrs.ditits+.digits

  • |
  • 向上させることができる - または
  • [.](?!$|\s+\p{Lu})を - 文字列の末尾($)続いていない点と一致または1+空白文字の後に大文字(\s+\p{Lu})が続きます。
関連する問題