Ich habe einen Datensatz, der 1000 Dokumente und alle darin enthaltenen Wörter darstellt. So repräsentieren die Zeilen die Dokumente und die Spalten die Wörter. So steht beispielsweise der Wert in Zelle für die Zeiten, in denen das Wort in Dokument . Jetzt muss ich mithilfe der tf / idf-Methode die "Gewichte" der Wörter finden, aber ich weiß eigentlich nicht, wie ich das machen soll. Kann mir bitte jemand weiterhelfen?
12
Antworten:
Wikipedia hat einen guten Artikel zum Thema, komplett mit Formeln. Die Werte in Ihrer Matrix sind die Termhäufigkeiten. Sie müssen nur die IDF finden:
(log((total documents)/(number of docs with the term))
und die 2 Werte multiplizieren .In R können Sie dies folgendermaßen tun:
Hier sind die Datensätze:
Sie können sich auch die IDs der einzelnen Begriffe ansehen:
quelle
log((number of docs)/(number of docs containing the term))
. Sie können auch nur die seltenen Begriffe herausfiltern.Es gibt das Paket tm (Text Mining) http://cran.r-project.org/web/packages/tm/index.html, das genau das tun sollte, was Sie brauchen:
R ist eine funktionale Sprache, daher kann das Lesen von Code schwierig sein (z. B. x in Begriffen).
quelle
Ihr Code hat einen Fehler: colSums berechnet die Anzahl der Vorkommen im Korpus, nicht die Anzahl der Texte mit dem Wort.
Eine solche Version wäre:
quelle
Dazu gibt es ein neues R-Paket: textir: Inverse Regression für die Textanalyse
Der relevante Befehl ist
tfidf
das Beispiel aus dem Handbuch:quelle
Ich komme zu spät zu dieser Party, aber ich habe mit den Konzepten von tc-idf gespielt (ich möchte das Wort 'concept' hervorheben, weil ich für die eigentlichen Berechnungen keinen Büchern gefolgt bin; sie sind also möglicherweise etwas abweichend und definitiv einfacher durchgeführt mit Paketen wie
{tm: Text Mining Package}
, wie erwähnt), und ich denke, was ich bekommen habe, könnte mit dieser Frage zusammenhängen, oder auf jeden Fall könnte dies ein guter Ort sein, um sie zu posten.SET-UP: Ich habe einen Korpus von
5
langen Absätzen von gedruckten Medien entnommen,text 1
durch5
wie die New York Times . Angeblich ist es ein sehr kleiner "Körper", sozusagen eine winzige Bibliothek, aber die Einträge in dieser "digitalen" Bibliothek sind nicht zufällig: Die ersten und fünften Einträge befassen sich mit Fußball (oder "Fußball" für "Social Club"). (?) hier) und genauer gesagt über das größte Team von heute. Sotext 1
beginnt zum Beispiel als ...Sehr schön! Auf der anderen Seite möchten Sie auf jeden Fall den Inhalt der drei dazwischen liegenden Einträge überspringen. Hier ist ein Beispiel (
text 2
):Was also zu tun , um jeden Preis „Surfen“ aus der zu vermeiden ,
text 1
zutext 2
, während sie weiterhin in der Literatur über allmächtiges Barcelona FC freuen intext 5
?TC-IDF: Ich habe die Wörter in jedem
text
in lange Vektoren unterteilt. Zählte dann die Häufigkeit jedes Wortes und erzeugte fünf Vektoren (einen für jedestext
), in denen nur die Wörtertext
gezählt wurden, die in dem entsprechenden angetroffen wurden - alle anderen Wörter, die zu anderentext
s gehörten, wurden mit Null bewertet. Im ersten Snippet vontext 1
zum Beispiel hätte sein Vektor eine Zählung von 1 für das Wort "Messi", während "Trump" 0 hätte. Dies war der tc- Teil.Der IDF- Teil wurde auch für jeden einzeln berechnet
text
und ergab 5 "Vektoren" (ich glaube, ich habe sie als Datenrahmen behandelt), die die logarithmischen Transformationen der Anzahl der Dokumente enthielten (leider nur von null auf fünf, angesichts unserer kleinen Bibliothek) ) mit einem bestimmten Wort wie in:text
Teil von der Zählung ausgeschlossen . Aber wenn ein Wort in allen Dokumenten auftauchte, war sein Idf stilltext
s vorhanden war.Die eintrittsweise Multiplikation vontc × idf für jeden
text
war die Wichtigkeit jedes Wortes für jeden der Bibliothekselemente - lokal vorherrschende, weltweit seltene Wörter .VERGLEICHE: Jetzt ging es nur noch darum, zwischen diesen "Vektoren von Wortbedeutung" Punktprodukte zu erzeugen .
Wie vorauszusehen war , das Skalarprodukt
text 1
mittext 5
war13.42645
, währendtext 1
v.text2
Nur war2.511799
.Der klobige R-Code (nichts zu imitieren) ist hier .
Auch dies ist eine sehr rudimentäre Simulation, aber ich denke, es ist sehr anschaulich.
quelle