Ярлыки именованных объектов NLTK - PullRequest
0 голосов
/ 04 мая 2020

Я продолжаю бить стену, когда дело доходит до НЛТК. Однако я смог создать токен и классифицировать одну строку текста, если я попытаюсь применить сценарий к нескольким строкам, я получу токены, но он не возвращает категорию, которая является для меня самой важной частью.

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

Я получаю токены, и он работает во всех строках, но не дает мне категорию «ЛИЦО».

Мне действительно нужны категории.

Разве это невозможно? Спасибо за помощь.

1 Ответ

0 голосов
/ 05 мая 2020

Здесь мы go ...

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...