我有一套我關心計數的標記。比方說,他們是:用Python計數並從結果中創建矩陣
pos_tags = ["NN", "NNS", "JJ"]
我希望我的程序通過句子的清單,也許看起來像這樣重複:
sents = ["I want to go home.", "I have five dollars.", "The grass is green and wet."]
我用nltk.pos_tag標記每個字與結果是:
['I', 'want', 'to', 'go', 'home', '.']
[('I', 'PRP'), ('want', 'VBP'), ('to', 'TO'), ('go', 'VB'), ('home', 'NN'), ('.', '.')]
['I', 'have', 'five', 'dollars', '.']
[('I', 'PRP'), ('have', 'VBP'), ('five', 'CD'), ('dollars', 'NNS'), ('.', '.')]
['The', 'grass', 'is', 'green', 'and', 'wet', '.']
[('The', 'DT'), ('grass', 'NN'), ('is', 'VBZ'), ('green', 'JJ'), ('and', 'CC'), ('wet', 'NN'), ('.', '.')]
我要檢查是否有在這裏有pos_tags任何話,我想我有似乎做到了這一點;然而,我有很大的麻煩,以我想要的形式返回結果,這是一種矩陣樣式。
行將是句子的數量。在這種情況下,3.列將是標籤的數量。在這種情況下,還3.
最後的結果會是什麼樣子:
[1, 0, 0
0, 1, 0
2, 0, 1]
這是我到目前爲止有:
def tagging(sents):
matrix = []
pos_tags = ["NN", "NNS", "JJ"]
for sent in sents:
tokens = nltk.word_tokenize(sent)
tagged_tokens = nltk.pos_tag(tokens)
tagged_tokens_final = tagged_tokens
for key, val in tagged_tokens_final:
if val in common_pos_tags:
counting = val.count(val)
非常感謝您的詳細解釋 - 計數部分特別有用!對於矩陣部分,我最終在numpy庫中使用了np.array - 像魅力一樣工作! – natalien
沒問題。你可以從最終結果中創建一個numpy數組,或者從一開始就用一個來填充。我想堅持核心Python的這個答案,因爲它看起來像你想要更基本的東西。 –