我有一个涉及大量文本数据的机器学习任务。我想识别并提取训练文本中的名词短语,以便稍后在管道中使用它们进行特征构建。我已经从文本中提取了我想要的名词短语类型,但我对 NLTK 还很陌生,所以我以一种可以分解列表理解中的每个步骤的方式来解决这个问题,如下所示。
但我真正的问题是,我是在重新发明轮子吗?有没有更快的方法来做到这一点,我没有看到?
import nltk
import pandas as pd
myData = pd.read_excel("\User\train_.xlsx")
texts = myData['message']
# Defining a grammar & Parser
NP = "NP: {(<V\w+>|<NN\w?>)+.*<NN\w?>}"
chunkr = nltk.RegexpParser(NP)
tokens = [nltk.word_tokenize(i) for i in texts]
tag_list = [nltk.pos_tag(w) for w in tokens]
phrases = [chunkr.parse(sublist) for sublist in tag_list]
leaves = [[subtree.leaves() for subtree in tree.subtrees(filter = lambda t: t.label == 'NP')] for tree in phrases]
将我们最终得到的元组列表列表展平为元组列表列表
leaves = [tupls for sublists in leaves for tupls in sublists]
将提取的术语加入一个二元组
nounphrases = [unigram[0][1]+' '+unigram[1][0] in leaves]
原文由 Silent-J 发布,翻译遵循 CC BY-SA 4.0 许可协议
看看 为什么我的 NLTK 函数在处理 DataFrame 时很慢? ,如果不需要中间步骤,则无需多次遍历所有行。
使用
ne_chunk
和解决方案NLTK 命名实体识别到 Python 列表 和
如何使用 NLTK ne_chunk 提取 GPE(位置)?
[代码]:
[出去]:
要使用自定义
RegexpParser
:[出去]: