NLTK命名实体类别标签

问题描述 投票:0回答:1

关于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)]]

我正在获取令牌,并且它可以在所有行中使用,但是没有给我一个类别'PERSON'。

我真的需要分类。

这不可能吗?谢谢您的帮助。

python-3.x pandas nltk jupyter
1个回答
0
投票

这里,我们去...

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)
text = df['text'].to_list()
# 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)
© www.soinside.com 2019 - 2024. All rights reserved.