2016-07-27 22 views
3

Ich habe einen großen Dokumentenkorpus mit mehr als 200 Dokumenten. Wie Sie von solch einem großen Korpus erwarten können, werden einige der Wörter falsch geschrieben, in verschiedenen Formaten verwendet und so weiter und so fort. Ich habe die Standard-Textverarbeitung wie zum Beispiel in Kleinbuchstaben konvertieren, Interpunktion entfernen, Wortstammbildung. Ich versuche, einige Wörter zu ersetzen, um die Rechtschreibung zu korrigieren und sie zu standardisieren, bevor ich zur Analyse übergehe. Ich habe mehr als 100 Substitution mit der gleichen Syntax wie unten getan und für die meisten Substitutionen funktioniert es wie erwartet. Einige (ca. 5%) arbeiten jedoch nicht. Zum Beispiel scheinen die folgenden Substitutionen nur begrenzte Wirkung zu haben:R tm Ersatzwörter in Corpus mit 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") 

Durch begrenzte Wirkung ich, dass sogar bedeuten, obwohl einige Ersetzungen arbeiten, manche nicht. Zum Beispiel, trotz des Versuchs zu ersetzen "elephantant medicinee", "firewoodd", sie existieren noch, wenn ich den DTM (Document Term Matrix) erstellen.

Ich habe keine Ahnung, warum dieser gemischte Effekt passiert.

Auch die folgende Zeile mit einer Kombination aus collect jedes Wort im Korpus ersetzt:

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

nur als Referenz, wenn ich nur ein einziges Wort ersetzen, ich bin mit der Syntax (man beachte die fest = TRUE):

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

Die eine, die eine einzige Substitution und andernfalls ist:

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

Antwort

4

Das Problem, das Sie haben, ist, dass die Änderungen in Ihren Mustern nicht verankert sind, und somit nur die erste Übereinstimmung "gewinnt", d. H. Verwendet, und der Rest wird nicht berücksichtigt.

Entweder sollten einige "Anker" (sagen wir, Wortgrenzen) um die Abwechslungen verwenden:

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

oder einfach den längeren Alternativen vor kürzere:

pattern = "medicinee|medecin|medicil|medicin" 

Beachten Sie, dass Sie können das Muster schneller machen, indem Sie Zeichenklassen für häufig falsch geschriebene Vokale verwenden (siehe [ei]) und Gruppen:

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

Danke. Das funktioniert. Irgendeine Idee, warum die einzelne Substitution scheitert? – DotPi

+1

Ich kann nur vermuten, dass die Reihenfolge der Ersetzungen falsch ist und es gibt einen anderen Ersatz, der vor und es gibt keine 'dogmonkeycat' im Text, die durch' Hundaffe Katze' ersetzt werden. –