如何使用 spacy 和 pandas 检查动词的存在?

Posted

技术标签:

【中文标题】如何使用 spacy 和 pandas 检查动词的存在?【英文标题】:How to check presense of verb using spacy and pandas? 【发布时间】:2019-02-18 19:07:08 【问题描述】:
import spacy, en_core_web_sm
nlp = en_core_web_sm.load()
doc = nlp(u"I will go to the mall")
chk_set = set(['VERB'])
print chk_set.issubset(t.pos_ for t in doc)

上面的代码返回 True if POS = verb 存在。

现在我想扩展此代码以阅读存储在 Excel 表中的句子列表。为了检查句子中标点符号的存在,我可以使用下面的代码来实现它。

问题是如何扩展下面的代码以合并上面的动词检查。

from pandas import read_excel
import pandas as pd
import xlsxwriter
my_sheet_name = 'Metrics' 
df = read_excel('sentence.xlsx', sheet_name = my_sheet_name)
df['.']=df['Sentence'].str.contains('.')
# df['VERB']=df['Sentence'].str.contains('.')
writer = pd.ExcelWriter('sentence.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Metrics')
writer.save()

预期结果:

Sentence                            Verb
I will go to the mall               True
the mall                            False
I may be here tomorrow.             True  

【问题讨论】:

更重要的是,我想知道如何将数据帧传递给 nlp。 【参考方案1】:

您可以使用NLTK 来做到这一点,如下所示:

import nltk
import pandas as pd

df = pd.DataFrame('sent': ['I will go to the mall', 'the mall', 'I may be here tomorrow.'])

def tag_verb(sent):
    words = nltk.word_tokenize(sent)
    tags = nltk.pos_tag(words)
    for t in tags:
        if t[1] == 'VB':
            return True
    return False

df['verb'] = df['sent'].apply(lambda x: tag_verb(x))

输出:

    sent                       verb
0   I will go to the mall      True
1   the mall                   False
2   I may be here tomorrow.    True

【讨论】:

如何在示例中使用 read_excel 从包含已发送列名的 xlsx 文件中读取 您关心的是 POS 标记,因此我通过创建虚拟数据提供了解决方案。如果您在阅读数据时遇到问题,我认为您应该在 SO 上搜索类似问题或提出新问题。

以上是关于如何使用 spacy 和 pandas 检查动词的存在?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 SpaCy

如何在 URDU 语言文本上进行 NLP? [关闭]

自然语言处理 Spacy & NLTK实操

spaCy中的自定义停用词不起作用

Spacy 相似性警告:“基于空向量评估 Doc.similarity。”

如何验证已安装的 spaCy 版本?