Используя регулярное выражение, чтобы разделить два слова и захватить первое слово - PullRequest
0 голосов
/ 20 января 2019

следующее предложение, помеченное частью речи: все животные / DT / NNS / VBP равны / JJ, /, но / CC некоторые / DT животные / NNS / VBP больше / RBR равны / JJ, чем / IN другие / NNS ./.

Как написать регулярное выражение, которое соответствует только словам каждого слова / pos-тега в предложении.

text="""All/DT animals/NNS are/VBP equal/JJ ,/, but/CC some/DT animals/NNS 
are/VBP more/RBR equal/JJ than/IN others/NNS ./."""
tokens=nltk.word_tokenize(text)
pattern="([A-Za-z]+)|[A-Za-z]"
print("Upper case words:")
for tok in tokens:
   if re.search(pattern, tok) is not None:
      print("'{}'".format(tok))

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Вы можете использовать следующее регулярное выражение:

(\S+)\/\S+\s?

Explaination:

(\S+) - это группа захвата, которая соответствует любому непробельному символу
/ соответствует символу /
\S+ соответствует непробельному символу, но не захвачено на этот раз
\s? необязательный пробел в конце

Вот ссылка , чтобы проверить регулярное выражение и получить объяснение

Как @Transhuman предложил использовать re.findall, чтобы получить все совпадения:

import re
print (re.findall(r'(\S+)/\S+\s?',text))

Вы можете проверить код Python здесь :

0 голосов
/ 20 января 2019

Использование re.findall

import re
print (re.findall(r'([a-zA-Z]+)/[a-zA-Z]+',text))
#['All', 'animals', 'are', 'equal', 'but', 'some', 'animals', 'are', 'more', 'equal', 'than', 'others']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...