Использование регулярных выражений в Python - PullRequest
0 голосов
/ 03 апреля 2012

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

Итак, мой пример:

  • string = 'Я люблю сыр, машины,и т.д., но мой самый любимый веб-сайт - это stackoverflow.Мою новую лошадь зовут Рэнди. '

И результат должен быть:

  • result =' Мне нравится сыр, машины и т. Д., Номой самый любимый веб-сайт это stackoverflow. '

Обычно я хотел бы сделать с:

re.findall(r'^(\s*.*?\s*)(?:\.|$)', event)

, но я хотел бы пропустить некоторые предварительные-определенные слова, как указано выше и т. д.

Я пришел с несколькими выражениями, но ни одно из них не сработало.

Ответы [ 2 ]

4 голосов
/ 03 апреля 2012

Вы можете попробовать токенайзер предложений Punkt от NLTK , который делает подобные вещи, используя реальный алгоритм, чтобы выяснить, что такое сокращения вместо вашей специальной коллекции сокращений.

NLTK включает в себя предварительно подготовленный для английского языка; загрузить его с:

nltk.data.load('tokenizers/punkt/english.pickle')

Из исходного кода:

>>> sent_detector = nltk.data.load('tokenizers/punkt/english.pickle')
>>> print '\n-----\n'.join(sent_detector.tokenize(text.strip()))
Punkt knows that the periods in Mr. Smith and Johann S. Bach
do not mark sentence boundaries.
-----
And sometimes sentences 
can start with non-capitalized words.
-----
i is a good variable
name.
1 голос
/ 03 апреля 2012

Как насчет поиска первой заглавной буквы после символа, заканчивающегося предложением?Конечно, это не надежно.

import re
r = re.compile("^(.+?[.?!])\s*[A-Z]")
print r.match('I like cheese, cars, etc. but my the most favorite website is stackoverflow. My new horse is called Randy.').group(1)

выходы

'I like cheese, cars, etc. but my the most favorite website is stackoverflow.'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...