stemCompletion funktioniert nicht

8

Ich verwende tm-Paket für die Textanalyse von Reparaturdaten, das Lesen von Daten in Datenrahmen, das Konvertieren in Corpus-Objekte, verschiedene Methoden zum Löschen von Daten mit low, stipWhitespace, RemoveStopwords und so weiter.

Zurückgenommen von Corpus-Objekt für stemCompletion.

Hat stemDocument mit der Funktion tm_map ausgeführt, meine Objektwörter sind stemmed

hat Ergebnisse erwartet.

Wenn ich die Funktion stemCompletion mit der Funktion tm_map ausführen möchte, funktioniert sie nicht und habe unter Fehler

  

Fehler in UseMethod ("Wörter"): keine anwendbare Methode für "Wörter"   angewendet auf ein Objekt der Klasse "character"

Trackback () ausgeführt, um anzuzeigen und Schritte wie folgt zu erhalten

%Vor%

Wie kann ich diesen Fehler beheben?

    
Sunil 08.08.2014, 14:39
quelle

4 Antworten

6

Ich habe den gleichen Fehler bei Verwendung von tm v0.6 erhalten. Ich vermute, dies tritt auf, weil stemCompletion nicht in den Standardtransformationen für diese Version des tm-Pakets enthalten ist:

%Vor%

Nun hat die Funktion tolower das gleiche Problem, kann aber mit der Funktion content_transformer funktionsfähig gemacht werden. Ich versuchte einen ähnlichen Ansatz für stemCompletion , war aber nicht erfolgreich.

Beachten Sie, dass stemCompletion zwar keine Standardumwandlung ist, aber trotzdem funktioniert, wenn Sie Wortstammwörter manuell eingeben:

%Vor%

Damit ich mit meiner Arbeit fortfahren konnte, habe ich jedes Dokument in einem Korpus manuell durch einzelne Leerzeichen getrennt, durch stemCompletion geführt und mit der folgenden (klobigen und nicht anmutigen!) Funktion wieder zusammengefügt:

%Vor%

wo dictCorpus nur eine Kopie des gereinigten Korpus ist, aber bevor er auftaucht. Die zusätzliche stripWhitespace ist spezifisch für mein Korpus, ist aber wahrscheinlich gut für ein allgemeines Korpus. Möglicherweise möchten Sie die Option type nach Bedarf von "kürzest" ändern.

Um ein vollständiges Beispiel zu geben, richten wir einen Dummy-Korpus mit den crude -Daten im tm-Paket ein:

%Vor%

Hinweis: Dieses Beispiel ist ungerade, da das falsch geschriebene Wort "copany" zugeordnet ist: - & gt; "copani" - & gt; "NA", in diesem Prozess. Ich bin mir nicht sicher, wie ich das korrigieren soll ...

Um den stemCompletion_mod durch den gesamten Korpus laufen zu lassen, verwende ich einfach sapply (oder parSapply mit Schnee-Paket).

Vielleicht könnte jemand mit mehr Erfahrung als ich eine einfachere Änderung vorschlagen, um stemCompletion in v0.6 des tm-Pakets zu verwenden.

    
cdxsza 19.08.2014 19:39
quelle
5

Ich hatte Erfolg mit dem folgenden Workflow:

  1. Verwenden Sie content_transformer , um eine anonyme Funktion auf jedes Dokument des Korpus anzuwenden,
  2. Teilen Sie das Dokument in Wörter mit Leerzeichen,
  3. rufen Sie stemCompletion auf den Wörtern mit Hilfe des Wörterbuchs
  4. auf
  5. und verketten Sie die einzelnen Wörter erneut in ein Dokument mit paste .

POC-Democode:

%Vor%

PS: Die Verwendung von c als Variablenname zum Speichern des Korpus ist aufgrund von base::c

keine gute Idee     
daroczig 08.09.2014 21:54
quelle
5

Danke, cdxsza. Ihre Methode hat bei mir funktioniert.

  

Ein Hinweis an alle, die stemCompletion verwenden:

     

Die Funktion vervollständigt eine leere Zeichenfolge mit einem Wort im Wörterbuch, was unerwartet ist. Siehe unten ein Beispiel, wo der erste "Montag" für das Leerzeichen am Anfang der Zeichenfolge erzeugt wurde.

%Vor%
  

Es kann leicht behoben werden, indem die leere Zeichenfolge "" vor stemCompletion wie folgt entfernt wird.

%Vor%

Siehe ein ausführliches Beispiel auf Seite 12 der Folien unter Ссылка

Grüße

Yanchang Zhao

RdataMining.com

    
Yanchang Zhao 23.05.2015 15:30
quelle
3

Das Problem besteht darin, dass die Verwendung von tolower (z. B. myCorpus <- tm_map(myCorpus, tolower) ) den Text in einfache Zeichenwerte umwandelt, die tm Version 0.6 zur Verwendung mit tm_map nicht akzeptiert.

Wenn Sie stattdessen Ihre ursprüngliche tolower wie folgt machen

myCorpus <- tm_map(myCorpus, content_transformer(tolower))

dann haben die Daten das richtige Format, wenn Sie stemCompletion benötigen.

Andere Funktionen wie removePunctuation und removeNumbers werden wie gewöhnlich mit tm_map verwendet, d. h. ohne content_transformer .

Referenz: Ссылка

    
Erik Wognsen 12.11.2014 13:56
quelle

Tags und Links