Ich verwende findAssocs()
des tm
-Pakets in einer Dokument-Häufigkeitsmatrix, um Wörter zu identifizieren, die bestimmten Begriffen in verschiedenen Dokumenten in einem Korpus zugeordnet sind.findAssocs() von tm-Paketen unterdrückt Verknüpfungen
Mein Problem ist, dass ich unterschiedliche Ausgaben erhalte, wenn ich einen Vektor von Begriffen als Eingabe für die Funktion gebe, im Vergleich zu einem einzigen Begriff als Eingabe.
Hier ist mein Beispiel.
library(tm)
txt <- c("alpha bravo", "alpha charlie", "alpha charlie", "zulu")
corp <- Corpus(VectorSource(txt))
dtm <- DocumentTermMatrix(corp)
Gibt die folgende dtm
> as.matrix(dtm)
Terms
Docs alpha bravo charlie zulu
1 1 1 0 0
2 1 0 1 0
3 1 0 1 0
4 0 0 0 1
Wenn ich möchte alle Begriffe mit "alpha"
assoziiert identifizieren ich folgende Ausgabe (wie beabsichtigt):
> findAssocs(dtm, "alpha", 0.00)
$alpha
charlie bravo
0.58 0.33
Ich könnte das tun Gleiches für "bravo"
und erhalten Sie die folgende Ausgabe (wie vorgesehen):
> findAssocs(dtm, "bravo", 0.00)
$bravo
alpha
0.33
Da ich diese Zuordnungen für eine Anzahl von Begriffen finden möchte, habe ich einen Vektor an findAssocs
übergeben, um die erforderliche Ausgabe zu erhalten. Wenn ich jedoch einen Vektor von Begriffen (chr) an die Funktion übergeben, ist die Ausgabe unterscheidet sich von der, die ich für einzelne Eingänge erhalten:
> findAssocs(dtm, c("alpha","bravo"), 0.00)
$alpha
charlie
0.58
$bravo
numeric(0)
Eigentlich ist die assocation zwischen "alpha"
und "bravo"
weggelassen, welche nicht das Verhalten Das hätte ich hier erwartet. Die Funktion scheint die einzelnen Terme unabhängig voneinander zu behandeln und analysiert daher nicht die Korrelation zwischen "alpha"
und "bravo"
, wenn sie beide an die Funktion in einem Vektor übergeben werden.
Kann jemand dieses Verhalten erklären und mir sagen, wie man es wegschmeißt? Ich konnte die Funktion für jeden einzelnen Begriff gelten als Abhilfe, aber das ist nicht wirklich praktisch ...
UPDATE
Was ich seltsam finde ist, dass die Korrelation zwischen "alpha"
und "bravo"
nicht weggelassen, wenn wir Plot die Verbände, z durch den folgenden Code:
> freqTerm <- findFreqTerms(dtm, 1)
> freqTerm
[1] "alpha" "bravo" "charlie" "zulu"
plot(dtm, term=freqTerm, corThreshold=0.0, weighting=T, attrs=list(node=list(fixedsize=FALSE, shape="ellipse")))
Wie ist plot(dtm, term=freqTerm ...
unterscheidet sich von "findAssocs()"
?
Es funktioniert nicht, weil 'findAssocs (dtm, c (" alpha "," bravo "), 0,00)' die Ausdrücke 'c (" alpha "," bravo ")' mit allen ** restlichen * vergleicht * * Begriffe im Korpus. Es berechnet nicht die paarweisen Korrelationen der Begriffe in dem Vektor, den Sie übergeben. –
der richtige Weg, um zu tun, was Sie wollen, wäre 'sapply (c (" Alpha "," Bravo "), Funktion (x) findAssocs (dtm, x, 0.00)) ' – scoa