Как применить любое регулярное выражение к моему теговому тексту в Python 3 - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть текст. Я токенизирую его и удаляю стоп-слова. затем я помечаю эти слова, используя stanford POS tagger в python. Сейчас я использую этот код для пометки слов и записи в файл.

tag = nltk.pos_tag(filtered_sentence)
print("tagging the words")
fh = open("Stop_Words.txt", "w+")
for i in range(0,len(filtered_sentence)):
    fh.write((tag[i][0])+" "+(tag[i][1])+"\n")
fh.close()

Теперь в моем файле есть что-то вроде этого:

paper NN
parallel NN
programming VBG
practical JJ
Greg NNP
Wilson NNP
intended VBD
scientist NN
interested JJ
... A big List ...

Что я хочу сейчас сделать, так это применить к этому регулярное выражение, чтобы найти конкретные случаи. Например, я хочу что-то вроде (JJ * N +), что означает прилагательное, за которым следует любое существительное. Я сделал N +, потому что NN, NNP и т. Д. Все существительные.

Как мне это сделать. Я невежественен. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 04 ноября 2018

Если вы хотите только JJ * N, вы можете сделать что-то вроде этого:

import re

text = '''paper NN
parallel NN
programming VBG
practical JJ
Greg NNP
Wilson NNP
intended VBD
scientist NN
interested JJ
'''

pattern = re.compile('\w+? JJ\n\w+ NN.?', re.DOTALL)

result = pattern.findall(text)
print(result)

выход

['practical JJ\nGreg NNP']

Объяснение

Шаблон '\w+? JJ\n\w+ NN.?' соответствует группе букв \w+, за которой следует пробел, за которым следует JJ, затем \n, за которым следует другая группа букв, за которой следует что-то с префиксом NN. Обратите внимание, что я включил оба слова, потому что я думаю, что это может быть полезно для ваших целей.

UPDATE

Если вы хотите ноль или более прилагательных JJ*, за которыми следует одно или несколько существительных NN+, вы можете сделать что-то вроде этого:

import re

text = '''paper NN
parallel NN
programming VBG
practical JJ
Greg NNP
Wilson NNP
intended VBD
scientist NN
interested JJ
'''

pattern = re.compile('(\w+? JJ\n)*(\w+ NN\w?)+', re.DOTALL)

result = pattern.finditer(text)
for element in result:
    print(element.group())
    print('----')

выход

paper NN
----
parallel NN
----
practical JJ
Greg NNP
----
Wilson NNP
----
scientist NN
----
...