У меня есть набор тегов, которые мне интересны при подсчете. Скажем, они:Подсчет в 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)
Большое спасибо за ваше подробное объяснение - счетная часть особенно помогла! Для части матрицы я закончил использование np.array в библиотеке numpy - работал как шарм! – natalien
Нет проблем. Вы можете создать массив numpy из конечного результата или использовать его для заполнения с самого начала. Я хотел придерживаться основного Python для этого ответа, потому что казалось, что вам нужно что-то более основное. –