Регулярное выражение в python для поиска сокращений - PullRequest
0 голосов
/ 17 апреля 2020

Задача состоит в том, чтобы найти аббревиатуры в абзаце, правило назначает две или более последовательных заглавных буквы (например, IT) в качестве акронимов, но акронимы плюс дефис плюс строчные слова (например, ASS-kee) не могут рассматриваться как задача, но ASS-AS является аббревиатурой. Моя проблема в том, что я не могу исключить слово типа ASS-kee, если я хочу найти сокращения с дефисом, например ASS-AS. Мой код:

s = 'ASCII (/ˈæskiː/ ASS-kee),[2]:6 abbreviated from American Standard Code \
for Information Interchange, is a character encoding standard for electronic \
communication. ASCII codes represent text in computers, telecommunications \
equipment, and other devices. The Internet Assigned Numbers Authority (IANA) \
prefers the name US-ASCII for this character encoding.'
print(re.findall(r'\b[A-Z]+\-[A-Z]+\b|\b[a-z]*[A-Z]{2,}\b',s))

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Результат findall в python отличается в зависимости от наличия групп в шаблоне. Вот рабочий пример вашей проблемы:

import re
s = 'ASCII (/ˈæskiː/ ASS-kee),[2]:6 abbreviated from American Standard Code \
for Information Interchange, is a character encoding standard for electronic \
communication. ASCII codes represent text in computers, telecommunications \
equipment, and other devices. The Internet Assigned Numbers Authority (IANA) \
prefers the name US-ASCII for this character encoding.'
m = re.findall(r'(\b[A-Z]{2,}(-[A-Z]+)+|\b[A-Z]{2,}(?!-)\b)',s)
result = [i[0] for i in m]
print(result)

Я обновил ваше регулярное выражение в соответствии с вашими потребностями, а также покажу, как получить нужные результаты. Уловка - отрицательное прогнозное утверждение , как уже упоминалось @PA. Вы можете прочитать больше об этом здесь . В результате получается следующий список:

['ASCII', 'ASCII', 'IANA', 'US-ASCII']

0 голосов
/ 17 апреля 2020

символ \b соответствует границе неиспользуемого слова, такой как дефис после букв, поэтому вам необходимо исключить - из \b.

Это исключение, к сожалению, не является тривиальная задача, так как это зависит от вкуса регулярного выражения. Один метод, который (я думаю) работает везде, - это использование негативного взгляда с ((?!-)\b).

Так что составление его в ваше выражение

\b[A-Z]+-[A-Z]+\b|\b[A-Z]+(?!-)\b

должно сделать эту работу

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