Шаблон регулярного выражения для поиска всех совпадений суффиксов, конечных кавычек и слов в корпусе с пометкой на английском языке sh POS - PullRequest
0 голосов
/ 11 апреля 2020

Я работаю над проектом НЛП, где мне дали набор предложений с тегами POS для работы. Формат набора данных (также должен содержать примеры предложений):

('word', 'pos_tag')

, если только слово не содержит одинарных кавычек (аффиксы типа 're,' s, n't, а также '' для конечных кавычек), в этом случае формат будет

("word", "pos_tag")

сегмент кода, который я использую для обработки этих данных устанавливается следующим образом

def corpus_reader(filepath):
 pattern = '\(\'(\w+)\', |(?<=\").*?\", ' 
 sentences = []
 with open( filepath ) as f:
     corpus = f.readlines()

 for line in corpus:
    temp = re.findall( pattern, line )
    sentences.append( temp )

return sentences

Шаблон состоит из двух шаблонов, которые cond1 | cond2 обнаруживает.

cond1 соответствует и извлекает все слова в корпусе.

cond2 is предназначены для соответствия '', n't, '' и '', которые заключены в двойные кавычки, как я упоминал ранее, но второе условие не работает для этого.

Желаемый результат для списка всех токенов, помеченных pos:

Может ли кто-нибудь предоставить правильный шаблон регулярных выражений, который будет использоваться для обнаружения упомянутых мною случаев?

Вот примеры предложений, которые нужно проанализировать, которые содержат 're, n't,' s и ''

[('We', 'PRP'), ("' re ", 'VBP'), ('говорящий', 'VBG'), ('about', 'IN'), ('years', 'NNS'), ('a go', 'IN') , ('before', 'IN'), ('any', 'NN'), ('услышано', 'VBD'), ('of', 'IN'), ('асбест', 'NN') , ('Имея', 'VBG'), ('любой', 'DT'), ('сомнительный', 'JJ'), ('свойства', 'NNS'), ('.', '.') ]

[('', ''), («Мы», «PRP»), («есть», «VBP»), («нет», «DT»), («полезно») , 'JJ'), ('информация', 'NN'), ('on', 'IN'), ('ли', 'IN'), ('users', 'NNS'), ('are' , 'VBP'), ('at', 'IN'), ('risk', 'NN'), (',', ','), ("''", "''"), (' сказал ',' VBD '), (' T -1 ',' -NONE- '), (' Джеймс ',' NNP '), (' A. ',' NNP '), ( «Talcott», «NNP»), («of», «IN»), («Boston», «NNP»), («s», «POS»), («Dana-Farber», «NNP» '), (' Рак ',' NNP '), (' Институт ',' NNP '), ('. ','. ')]

[(' The ',' DT '), ('US', 'NNP'), ('is', 'VBZ'), ('one', 'CD'), ('of', 'IN'), ('the', 'DT'), ('немногие', 'JJ'), ('промышленно развитые', 'VBN'), ('нации', 'NNS'), ('that', 'WDT'), (' T - 7 ',' -NONE- '), (' did ',' VBZ '), ("n't", "RB"), ("have", "VB"), ("a", "DT" ), («выше», «JJR»), («стандарт», «NN»), («из», «IN»), («регулирование», «NN»), («для», «IN» ), ('the', 'DT'), ('smooth', 'JJ'), (',', ','), ('needle-like', 'JJ'), ('fiber', ' NNS '), (' such ',' JJ '), (' as ',' IN '), (' crocidolite ',' NN '), (' that ',' WDT '), (' T -1 ',' -NONE- '), (' are ',' VBP '), (' классифицировано ',' VBN '), (' * -5 ',' -NONE- '), (' как ',' IN '), (' amphobiles ',' NNS '), (', ',', '), (' related ',' VBG '), (' to ',' TO '), (' Брук ',' NNP '), (' T. ',' NNP '), (' Mossman ',' NNP '), (', ',', '), (' a ',' DT '), ( 'Professor', 'NN'), ('of', 'IN'), ('pathlogy', 'NN'), ('at', 'IN'), ('the', 'DT'), ( «Университет», «NNP»), («of», «IN»), («Vermont», «NNP»), («College», «NNP»), («of», «I N '), (' Медицина ',' NNP '), ('. ','. ')]

[(' ', ' '), (' Что ',' WP '), ( ' T -14', '-NONE-'), ('значения', 'VBZ'), ('is', 'VBZ'), ('what', 'WP'), ( 'рекламодатели', 'NNS'), ('are', 'VBP'), ('payment', 'VBG'), (' T -15', '-NONE-'), ( 'per', 'IN'), ('page', 'NN'), (',', ','), ('and', 'CC'), ('in', 'IN') , ('that', 'DT'), ('Department', 'NN'), ('we', 'PRP'), ('are', 'VBP'), ('working', 'VBG') , ('fine', 'RB'), ('this', 'DT'), ('fall', 'NN'), (',', ','), ("''", "'' ' "), ('сказал', 'VBD'), (' T -1', '-NONE-'), ('Mr.', 'NNP'), (" Spoon "," NNP '), ('. ','. ')]

Спасибо и благодарность за все попытки ответить и помочь

1 Ответ

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

Я бы использовал:

(               # start of capture group 1
  (?<=\(')      # first alternative: positive lookbehind: ('
  [^']*         # zero or more characters other than '
  (?=',)        # positive lookahead: ',
|               # start of second alternative:
  (?<=\(")      # positive lookbehind: ("
  [^"]*         # zero or more characters other than "
  (?=",)        # positive lookahead: ",
)

См. Regex Demo

...