python-3.x - NLTK 命名实体类别标签
问题描述
当谈到 NLTK 时,我一直在碰壁。我已经能够对单个文本字符串进行标记和分类,但是,如果我尝试跨多行应用脚本,我会得到标记,但它不会返回对我来说最重要的部分。
import pandas as pd
import nltk
from nltk.tokenize import word_tokenize
from nltk.tag import pos_tag
+nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
nltk.download('maxent_ne_chunker')
nltk.download('words')
SENT_DETECTOR = nltk.data.load('tokenizers/punkt/english.pickle')
例子:
ex = 'John'
ne_tree = nltk.ne_chunk(pos_tag(word_tokenize(ex)))
print(ne_tree)
输出:
(S (PERSON John/NNP))
这正是我正在寻找的。我需要的不仅仅是 NNP 类别。
当我在表格中应用它时,我只得到令牌而不是类别。
例子:
df = pd.read_csv('ex3.csv')
df
输入:
Order Text
0 0 John
1 1 Paul
2 2 George
3 3 Ringo
代码:
df['results'] = df.Text.apply(lambda x: nltk.ne_chunk(pos_tag(word_tokenize(x))))
df
输出:
print(df)
Order Text results
0 0 John [[(John, NNP)]]
1 1 Paul [[(Paul, NNP)]]
2 2 George [[(George, NNP)]]
3 3 Ringo [[(Ringo, NN)]]
我得到了令牌,它在所有行中都有效,但它没有给我一个类别“人”。
我真的需要分类。
这不可能吗?谢谢您的帮助。
解决方案
开始了...
import pandas as pd
import nltk
from nltk.tokenize import word_tokenize
from nltk.tag import pos_tag
+nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
nltk.download('maxent_ne_chunker')
nltk.download('words')
df = pd.read_csv("ex3.csv")
# print(df)
text1 = df['text'].to_list()
text =[]
for i in text1:
text.append(i.capitalize())
# create a column for store resullts
df['results'] = ""
for i in range(len(text)):
SENT_DETECTOR = nltk.data.load('tokenizers/punkt/english.pickle')
ne_tree = nltk.ne_chunk(pos_tag(word_tokenize(text[i])))
df['results'][i] = ne_tree[0].label()
print(df)
推荐阅读
- javascript - 在javascript中取一个div元素的孙子
- python - 如何将python字典转换为熊猫中的数据框
- java - 在 Ubuntu 中使用 avdmanager 创建 AVD 时出错
- javascript - 数据未正确显示在屏幕上
- javascript - 使用 Webpack(在 Django 中)减少 FontAwesome 5(带 JS 的 SVG)中的 all.js 大小
- c# - 仅在 href 之外匹配 URL 的正则表达式
- node.js - 数组中对象的值在 Mongoose 中不更新
- python-3.x - 如何使用 Pandas 从列中生成键
- r - R 中 PostgreSqL 数据的简单可视化
- python - 使用 Python 从 txt 文件中删除段落和空格(和制表符)