Как исправить ошибку «ValueError (« входные данные должны содержать более одного предложения »)» - PullRequest
0 голосов
/ 07 февраля 2019

Я пишу сценарий, который берет URL-адрес веб-сайта и загружает его, используя красивый суп.Затем он использует gensim.summarization для суммирования текста, но я продолжаю получать ValueError («вход должен иметь более одного предложения»), даже если текст содержит более одного предложения.Работает первый раздел скрипта, который загружает текст, но я не могу получить вторую часть для суммирования текста.

import bs4 as bs
import urllib.request
from gensim.summarization import summarize
from gensim.summarization.textcleaner import split_sentences

#===========================================

print("(Insert URL)")
url = input()
sauce = urllib.request.urlopen(url).read()
soup = bs.BeautifulSoup(sauce,'lxml')

#===========================================

print(soup.title.string)
with open (soup.title.string + '.txt', 'wb') as file:
    for paragraph in soup.find_all('p'):
        text = paragraph.text.replace('.', '.\n')
        text = split_sentences(text)
        text = summarize(str(text))
        text = text.encode('utf-8', 'ignore')

#===========================================

        file.write(text+'\n\n'.encode('utf-8'))

Он должен создать файл .txt с итоговым текстом в нем после запуска скриптав любой папке находится файл .py

1 Ответ

0 голосов
/ 07 февраля 2019

Не следует использовать split_sentences() перед передачей текста в summarize(), поскольку summarize() принимает строку (с несколькими предложениями) в качестве ввода.

В своем коде вы сначала превращаете свой текст в список предложений (используя split_sentences()), а затем преобразуете его обратно в строку (с помощью str()).В результате получается строка типа "['First sentence', 'Second sentence']".Не имеет смысла передавать это на summarize().

Вместо этого вы должны просто передать ваш необработанный текст в качестве ввода:

text = summarize(text)
...