Проблема в Python-проекте "Гутенберг"?
Я пытаюсь обрабатывать различные тексты регулярными выражениями и NLTK python-который находится в http://www.nltk.org/book - . я пытаюсь создать генератор случайных текстов, и у меня возникли трудности с проблемой. Во-первых, вот мой алгоритм:
-
Введите предложение в качестве входных данных - это называется триггерной строкой -
-
Получить самое длинное слово в строке триггера
-
Поиск по всей базе данных Project Gutenberg предложений, содержащих это слово-независимо от верхний регистр нижний регистр -
-
Верните самое длинное предложение, содержащее слово, о котором я говорил в шаге 3
-
Добавьте предложение в шаге 1 и шаге 4 вместе
-
Повторите этот процесс. Обратите внимание, что я должен взять самое длинное слово во втором предложении и продолжать так и так-
gutenberg.sents()
, но поиск без учета регистра практически невозможен, так как gutenberg.sents()
выводит предложения в книгах следующим образом-в формате списка списков -:
Пример: все предложения шекспировского Макбета вызываются с помощью набора
import nltk
from nltk.corpus import gutenberg
gutenberg.sents('shakespeare-macbeth.txt')
В командной строке оболочки python и выводится:
[['[', 'The', 'Tragedie', 'of', 'Macbeth', 'by', 'William', 'Shakespeare', '1603', ']'],
['Actus', 'Primus', '.'], .......]
С [трагедией Макбета Уильяма Шекспира, 1603] и Actus Primus. это первые два предложения.
Как я могу найти слово "я"? ищете независимо от того, что он прописной/строчный ? Я отчаянно нуждаюсь в помощи, так как я возился с этим в течение последних двух дней, и это начинает действовать мне на нервы. Большое спасибо.
2 ответа:
Задан список
L
слов и целевое словоt
,any(t.lower()==w.lower() for w in L)
Сообщает вам, имеет ли L слово t без учета регистра. Это быстрее, конечно, сделать
lt = t.lower() any(lt==w.lower() for w in L)
Поскольку Python не" поднимает " постоянное вычисление из цикла, и, если вы не поднимете его сами, оно будет выполняться повторно.
Учитывая список списков
lol
, самый длинный подсписок, включающийt
, можно найти поlongest = max((L for L in lol if any(lt==w.lower() for w in L)), key=len)
Если несколько подсписков включают
t
и имеют одинаковое значение максимальная длина, это даст вам первый, как это бывает.
Как насчет использования встроенной функции: str.lower () ¶ Возвращает копию строки, преобразованной в нижний регистр.
Тогда просто сравните строки.