Mam zestaw danych, który reprezentuje 1000 dokumentów i wszystkie słowa, które się w nim pojawiają. Tak więc wiersze reprezentują dokumenty, a kolumny - słowa. Na przykład wartość w komórce oznacza czas, w którym słowo występuje w dokumencie . Teraz muszę znaleźć „wagi” słów, używając metody tf / idf, ale tak naprawdę nie wiem, jak to zrobić. Czy ktoś mógłby mi pomóc?j i
12
Odpowiedzi:
Wikipedia ma dobry artykuł na ten temat, wraz z formułami. Wartości w macierzy są częstotliwościami. Musisz tylko znaleźć idf:
(log((total documents)/(number of docs with the term))
i pomnożyć 2 wartości.W R możesz to zrobić w następujący sposób:
Oto zestawy danych:
Możesz także spojrzeć na idf każdego terminu:
źródło
log((number of docs)/(number of docs containing the term))
. Możesz także odfiltrować rzadkie warunki.jest pakiet tm (eksploracja tekstu) http://cran.r-project.org/web/packages/tm/index.html, który powinien zrobić dokładnie to, czego potrzebujesz:
R jest językiem funkcjonalnym, więc czytanie kodu może być trudne (np. X pod względem)
źródło
W kodzie występuje błąd: colSums oblicza liczbę wystąpień w korpusie, a nie liczbę tekstów ze słowem.
Wersja obliczeniowa taka to:
źródło
Istnieje nowy pakiet R, który może to zrobić: textir: Regresja odwrotna do analizy tekstu
Odpowiednim poleceniem jest
tfidf
przykład z instrukcji:źródło
Jestem spóźniony na tę imprezę, ale bawiłem się koncepcjami tc-idf (chcę podkreślić słowo „koncepcja”, ponieważ nie śledziłem żadnych książek do faktycznych obliczeń; więc mogą być nieco nie na pewno i zdecydowanie łatwiejsze do przeprowadzenia z pakietami
{tm: Text Mining Package}
, jak wspomniano), i myślę, że to, co otrzymałem, może być związane z tym pytaniem lub, w każdym razie, może to być dobre miejsce do opublikowania go.SET-UP: Mam korpus z
5
długimi paragrafach zaczerpniętych z mediów drukowanych,text 1
przez5
takich jak The New York Times . Podobno jest to bardzo małe „ciało”, że tak powiem, mała biblioteka, ale wpisy w tej „cyfrowej” bibliotece nie są przypadkowe: Pierwsze i piąte wpisy dotyczą piłki nożnej (lub „piłki nożnej” w przypadku „klubu towarzyskiego” (?) tutaj), a dokładniej o dzisiejszym najlepszym zespole. Na przykładtext 1
zaczyna się jako ...Bardzo dobrze! Z drugiej strony zdecydowanie chciałbyś pominąć zawartość trzech wpisów pomiędzy. Oto przykład (
text 2
):Co więc zrobić, aby za wszelką cenę uniknąć „surfowania” od czasu
text 1
dotext 2
czasu, ciesząc się nadal literaturą o wszechmogącym FC Barcelonatext 5
?TC-IDF: Wyizolowałem słowa w każdym
text
na długie wektory. Następnie policzył częstotliwość każdego słowa, tworząc pięć wektorów (po jednym dla każdegotext
), w którychtext
zliczono tylko słowa napotkane w odpowiednim słowie - wszystkie pozostałe słowa należące do innychtext
s zostały wycenione na zero. Na przykład w pierwszym fragmencietext 1
jego wektor miałby liczbę 1 dla słowa „Messi”, podczas gdy „Trump” miałby 0. To była część tc .Część idf została również obliczona osobno dla każdego
text
i dała 5 „wektorów” (myślę, że potraktowałem je jak ramki danych), zawierające logarytmiczne przekształcenia liczby dokumentów (niestety, tylko od zera do pięciu, biorąc pod uwagę naszą małą bibliotekę ) zawierające dane słowo jak w:text
text
text
PORÓWNANIA: Teraz wystarczyło wykonać produkty kropkowe wśród tych „wektorów o znaczeniu słownym”.
Jak można się spodziewać, iloczyn iloczynu
text 1
ztext 5
był13.42645
, podczas gdytext 1
v.text2
Był tylko2.511799
.Niezgrabny kod R (nic do naśladowania) jest tutaj .
Ponownie, jest to bardzo prosta symulacja, ale myślę, że jest bardzo graficzna.
źródło