Теги POS на уровне Word в Python

Я пытаюсь сделать тег pos для каждого слова в каждой строке (каждая строка содержит несколько предложений).

У меня есть этот код:

import nltk import pos_tag
import nltk.tokenize import word_tokenize

f = open('C:\Users\test_data.txt')
data = f.readlines()

#Parse the text file for NER with POS Tagging
for line in data:
    tokens = nltk.word_tokenize(line)
    tagged = nltk.pos_tag(tokens)
    entities = nltk.chunk.ne_chunk(tagged)
    print entities
f.close()

Но код дает тег для каждой строки, и вывод выглядит так:

[('Квартира совершенно новая и безупречная в своей чистоте.', 'NNP'), ('"Потрясающее маленькое место в горах.', 'NNP'), ('Очень удобное место рядом с остановкой Фатима Луас . Я люблю это место. \nДжозе и Вадим очень приветливы и очень хорошо ко мне относились. \nНадеюсь, остановимся здесь снова.', 'NNP'), ('Очень услужливый и общительный хозяин. Отличное расположение, хорошее транспортное сообщение. Номер был слишком мал для пары, и нехватка шкафов очень ощущалась.\n\nВ остальном довольно чистый и ухоженный.', 'NNP'), ("Все было точно так, как описано. Это красиво.', 'NNP ')]

В моем коде есть «токенизатор», и я не знаю, что не так с моим кодом. Мне нужен тег pos для каждого слова, а не для каждой строки. Но все же каждая строка должна быть разделена (или выделена) скобками или чем-то в этом роде.


person Emily    schedule 05.09.2017    source источник
comment
на моем компьютере нет проблем с python3. Я не знаю, что случилось...   -  person mquantin    schedule 05.09.2017
comment
@mquantin, у меня тоже нет проблем с python 3, но код дал мне вывод выше, который представляет собой теги pos на уровне строки. Получили ли вы теги pos на уровне слов, означающие, что каждое слово имеет тег pos?   -  person Emily    schedule 05.09.2017
comment
@mquantin, к вашему сведению, в моем наборе данных предложения в скобках хранятся в одной строке. Вероятно, поэтому один тег pos был присвоен предложениям в скобках.   -  person Emily    schedule 05.09.2017
comment
да, я получил теги PoS на уровне слов, круглые скобки разбиты на части и помечены тегами PoS (как ( )   -  person mquantin    schedule 05.09.2017
comment
@mquantin, можешь показать результат? Как выглядят результаты? И как выглядят ваши сохраненные данные? В моих данных предложения в каждой скобке хранятся в одной строке в формате csv. Мне действительно нужно получить тот же результат, что и у вас, поэтому ответы очень ценятся.   -  person Emily    schedule 05.09.2017


Ответы (1)


(чистая копипаста из того, что работает на моем компьютере)

Запуск вашего кода (обратите внимание на простой оператор импорта):

#!/usr/bin/env python3
# encoding: utf-8
import nltk
f = open('/home/matthieu/Téléchargements/testtext.txt')
data = f.readlines()

for line in data:
    tokens = nltk.word_tokenize(line)
    tagged = nltk.pos_tag(tokens)
    entities = nltk.chunk.ne_chunk(tagged)
    print(entities)
f.close()

В следующем необработанном текстовом файле Unicode (3 строки):

(this is a first example.)(Another sentence in another parentheses.)
(onlyone in that line)
this is a second one wihtout parenthesis. (Another sentence in another parentheses.)

Я получаю следующие результаты:

(S
(/(
this/DT
is/VBZ
a/DT
first/JJ
example/NN
./.
)/)
(/(
Another/DT
sentence/NN
in/IN
another/DT
parentheses/NNS
./.
)/))
(S (/( onlyone/NN in/IN that/DT line/NN )/))
(S
this/DT
...

Как видите, особой проблемы нет. Правильно ли вы анализируете данные csv? csv полезен в вашем случае? Вы пытались использовать простой текстовый файл?

person mquantin    schedule 06.09.2017
comment
большое спасибо! Это сработало после того, как я изменил кодировку данных на «utf-8» и по какой-то причине установил «numpy». Я ценю вашу помощь. - person Emily; 06.09.2017
comment
Я сделал. Спасибо еще раз! - person Emily; 06.09.2017