Извлечение высказываний на строку в Python - PullRequest
0 голосов
/ 24 августа 2018

У меня есть текстовые данные, содержащие одно высказывание на строку.Я хочу извлечь его, чтобы у меня был список, содержащий все высказывания с одинаковой длиной строки.

Вот пример моих данных input.txt

I am very happy today.
Are you angry with me...? No?
Oh my dear, you look so beautiful.
Let's take a rest, I am so tired. 
Excuse me. This is my fault.

В настоящее время яиспользуйте следующий код Python:

from nltk import tokenize

utterances = []
with open('input.txt', 'r') as myfile:
    for line in myfile.readlines():
        utterance = tokenize.sent_tokenize(line)
        utterances = np.append(utterances, utterance)
utterances = list(utterances)
len(utterances)

Это дает общее количество высказываний: 7, оно должно быть 5 с входными данными.

Я ожидаю следующий вывод (список из 5 высказываний)),

['I am very happy today.', 'Are you angry to me...? No?', 'Oh my dear, you looks so beautiful.', "Let's take a rest, I am so tired.", 'Excuse me. This is my fault.']

В то время как приведенный выше код на python приводит к следующему выводу (7 предложений).

['I am very happy today.', 'Are you angry to me...?', 'No?', 'Oh my dear, you look so beautiful.', "Let's take a rest, I am so tired.", 'Excuse me.', 'This is my fault.']

Есть ли что-нибудь лучше, чем tokenize.sent_tokenize от NLTK?Я думаю, что по этой причине я получил неправильный результат.

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

В этой строке

utterance = tokenize.sent_tokenize(line)

вы просите nltk разбить ваши данные на предложения , а не высказывания . Эта функция считает ? и . для обозначения концов предложений. В двух ваших строках данных содержится более одного терминатора предложений, поэтому токенизатор считает их двумя предложениями в каждом. Вот почему ваш результат содержит 7 предложений (а не 8, как вы сообщаете): каждая строка 2 и строка 5 разбиты на два предложения.

0 голосов
/ 24 августа 2018

Просто добавление в список без np.append() и 'sent_tokenize' работает

from nltk import tokenize

utterances = []
with open('input.txt', 'r') as myfile:
for line in myfile.readlines():
    utterance = line.strip('\n')
    utterances.append(utterance)
print(utterances)
...