2016-07-27 7 views
3

私は200以上の文書を持つ大きな文書コーパスを持っています。このような大きなコーパスから期待できるとおり、一部の単語のスペルが間違っていたり、さまざまな形式で使用されたりしています。私は小文字に変換する、句読点を削除する、単語をステミングするなどの標準のテキスト処理を行っています。私はスペルを修正するためにいくつかの言葉を置き換え、分析に移る前にそれらを標準化しようとしています。私は以下のような同じ構文を使用して100個以上の置換を行いました。置換のほとんどは期待通りに動作しています。しかし、一部(約5%)は働いていません。R tm gsubを使用してコーパスの単語を置換する

docs <- tm_map(docs, content_transformer(gsub), pattern = "medecin|medicil|medicin|medicinee", replacement = "medicine") 
docs <- tm_map(docs, content_transformer(gsub), pattern = "eephant|eleph|elephabnt|elleph|elephanyt|elephantant|elephantant", replacement = "elephant") 
docs <- tm_map(docs, content_transformer(gsub), pattern = "firehood|firewod|firewoo|firewoodloc|firewoog|firewoodd|firewoodd", replacement = "firewood") 

私はいくつかの置換が作業しているにもかかわらず、一部ではないという意味では限られた効果により、たとえば以下の置換は、限られた効果を持っているようです。たとえば、「elephantant」「medicinee」「firewoodd」と置き換えようとしても、DTM(文書用語行列)を作成するときにはまだ存在します。

なぜこの混合効果が起こっているのかわかりません。

また、次の行は、収集のいくつかの組み合わせでコーパス内のすべての単語を置き換えている:固定気づく、参考まで

docs <- tm_map(docs, content_transformer(gsub), pattern = "colect|colleci|collectin|collectiong|collectng|colllect|", replacement = "collect") 

私は1つだけの単語を置き換えたときに、私は(構文を使用しています= TRUE):

docs <- tm_map(docs, content_transformer(gsub), pattern = "charcola", replacement = "charcoal", fixed=TRUE) 

単一置換および失敗しているものである:

docs <- tm_map(docs, content_transformer(gsub), pattern = "dogmonkeycat", replacement = "dog monkey cat", fixed=TRUE) 

答えて

4

あなたの問題は、あなたのパターンの変化が固定されておらず、したがって最初のパターンのみが「勝ち」、すなわち使用され、残りは考慮されないということです。

あなたは交番の周りにいくつかの "アンカー"(たとえば、ワード境界)を使用する必要がありますいずれか

:という

pattern = "medicinee|medecin|medicil|medicin" 

注:

pattern = "\\b(medecin|medicil|medicin|medicinee)\\b" 

か、単に短いものの前に長い選択肢を置くを頻繁にミスタイプされた母音の文字クラス([ei]を参照)とグループを使用すると、パターンを高速にすることができます。

pattern = "med[ie]ci(?:n(?:ee)?|l)" 
+0

ありがとうございました。それは動作します。なぜ単一の置換が失敗したのか? – DotPi

+1

私は置換の順序が間違っていると疑うことができます。以前に起こった別の置換があり、 'dogmonkeycat'に置き換えられるテキストに' dogmonkeycat'が残っていません。 –

関連する問題