Muszę zdobyć najpopularniejsze ngramy z tekstu. Długość Ngrams musi wynosić od 1 do 5 słów.Lista Pythona z Ngrams z częstotliwościami
Wiem, jak uzyskać bigramy i trygramy. Na przykład:
bigram_measures = nltk.collocations.BigramAssocMeasures()
finder = nltk.collocations.BigramCollocationFinder.from_words(words)
finder.apply_freq_filter(3)
finder.apply_word_filter(filter_stops)
matches1 = finder.nbest(bigram_measures.pmi, 20)
Jednak dowiedziałem się, że scikit-learn może uzyskać ngramy o różnej długości. Na przykład mogę ngrams o długości od 1 do 5.
v = CountVectorizer(analyzer=WordNGramAnalyzer(min_n=1, max_n=5))
Ale WordNGramAnalyzer jest teraz przestarzała. Moje pytanie brzmi: W jaki sposób mogę uzyskać N najlepsze słowo kolokacji z mojego tekstu, z długościami kolokacji od 1 do 5. Również muszę uzyskać FreqList z tej kolokacji/ngrams.
Czy mogę to zrobić z nltk/scikit? Muszę uzyskać kombinacje ngramów o różnych długościach z jednego tekstu?
Na przykład przy użyciu bigramów NLTR i trygramów, w których wiele sytuacji, w których moje trygramy zawierają moje bitgramy, lub moje trygramy stanowią część większych 4-gramów. Na przykład:
bitgrams: cześć moje Trygramów: cześć nazywam
wiem jak wykluczyć bigrams z trygramów, ale potrzebujemy lepszych rozwiązań.
Jeśli nie chcesz tfidf normalizację po prostu użyj: 'CountVectorizer (min_n = 1, max_n = 5) .fit_transform (list_of_strings)'. – ogrisel
, ale co mam zrobić dalej? Jak mogę uzyskać częstotliwości ngrams? – twoface88
@ twoface88: 'v = CountVectorizer (min_n = 1, max_n = 5); X = v.fit_transform (["Jabłko dziennie nie dopuszcza do siebie lekarza"]); zip (v.inverse_transform (X) [0], X.A [0]) ". Zwróć uwagę, że stopwords i tokeny jednego znaku zostaną domyślnie usunięte. –