我使用python spacy和它的工作正常標記每個單詞,但我想知道是否有可能找到一個字符串中最常見的單詞。還有可能獲得最常見的名詞,動詞,副詞等嗎?如何使用spacy找到最常用的單詞?
有一個count_by函數,但我似乎無法讓它以任何有意義的方式運行。
我使用python spacy和它的工作正常標記每個單詞,但我想知道是否有可能找到一個字符串中最常見的單詞。還有可能獲得最常見的名詞,動詞,副詞等嗎?如何使用spacy找到最常用的單詞?
有一個count_by函數,但我似乎無法讓它以任何有意義的方式運行。
這應該看起來與在Python中對其他東西進行計數基本相同。 spaCy允許您迭代文檔,並返回一系列令牌對象。這些可用於訪問註釋。
from __future__ import print_function, unicode_literals
import spacy
from collections import defaultdict, Counter
nlp = spacy.load('en')
pos_counts = defaultdict(Counter)
doc = nlp(u'My text here.')
for token in doc:
pos_counts[token.pos][token.orth] += 1
for pos_id, counts in sorted(pos_counts.items()):
pos = doc.vocab.strings[pos_id]
for orth_id, count in counts.most_common():
print(pos, count, doc.vocab.strings[orth_id])
請注意,.orth和.pos屬性是整數。您可以通過.orth_和.pos_屬性獲取它們映射的字符串。 .orth屬性是令牌的非標準化視圖,還有.lower,.lemma等字符串視圖。你可能想綁定一個.norm函數來做你自己的字符串規範化。有關詳細信息,請參閱文檔。
整數對於您的計數很有用,因爲如果您計算的是大型語料庫,則可以使計數程序更加高效地存儲內存。您還可以將頻繁計數存儲在一個numpy數組中,以提高速度和效率。如果你不想打擾這個,可以直接用.orth_屬性來計算,或者使用別名.text。
請注意,上面代碼片段中的.pos屬性給出了一組粗糙的詞性標籤。更豐富的樹庫標籤在.tag屬性中可用。
我最近不得不計算文本文件中所有記號的頻率。您可以使用pos_屬性過濾出單詞以獲得您喜歡的POS令牌。這裏有一個簡單的例子: