首页 > 解决方案 > 生成二元组,但只生成名词和动词组合

问题描述

我下面有一些代码可以为我的数据框列生成二元组。

import nltk
import collections
counts = collections.Counter()
for sent in df["message"]:
    words = nltk.word_tokenize(sent)
    counts.update(nltk.bigrams(words))
counts = {k: v for k, v in counts.items() if v > 25}

这非常适合在我的数据框的“消息”列中生成我最常见的二元组,但是,我想获得每对二元组仅包含一个动词和一个名词的二元组。

任何使用 spaCy 或 nltk 的帮助将不胜感激!

标签: pythonnlpnltkspacy

解决方案


使用spaCy,您可以访问各种语言的预训练模型。您可以像这样安装它们:python -m spacy download en_core_web_sm

然后,您可以轻松地运行类似这样的操作来进行自定义过滤:

import spacy

text = "The sleeping cat thought that sitting in the couch resting would be a great idea."
nlp = spacy.load('en_core_web_sm')
doc = nlp(text)
for i in range(len(doc)):
    j = i+1
    if j < len(doc):
        if (doc[i].pos_ == "NOUN" and doc[j].pos_ == "VERB") or (doc[i].pos_ == "VERB" and doc[j].pos_ == "NOUN"):
            print(doc[i].text, doc[j].text, doc[i].pos_, doc[j].pos_)

这将输出

睡觉的猫 动词名词

猫想名词动词

沙发休息名词动词


推荐阅读