N-грамм на основе POS-тегов: Spacy - PullRequest
       73

N-грамм на основе POS-тегов: Spacy

0 голосов
/ 20 сентября 2019

У меня есть список из 20 правил для извлечения кусочков пространственной триграммы из предложения.

Куски могут иметь триграммы pos-тегов: -

  • Правило 1: [VERB, ADJ, NOUN]
  • Правило 2: [NOUN, VERB, ADV]
  • Правило 3: [NOUN, ADP, NOUN] и т. Д.

Пример ввода:

"Education of children was our revenue earning secondary business."

Желаемый вывод:

["Education of children","earning secondary business"]

Я уже пробовал Spacy Matcher и мне нужно что-то более оптимизированное, чем запуск цикла for, так как набор данных очень большой.

1 Ответ

0 голосов
/ 20 сентября 2019

Я думаю, что вы ищете соответствие на основе правил .Ваш код будет выглядеть примерно так:

import spacy
from spacy.matcher import Matcher

nlp = spacy.load("en_core_web_sm")

list_of_rules = [
    ["VERB", "ADJ", "NOUN"],
    ["NOUN", "VERB", "ADV"],
    ["NOUN", "ADP", "NOUN"],
    # more rules here...
]

rules = [[{"POS": i} for i in j] for j in list_of_rules]

matcher = Matcher(nlp.vocab)
matcher.add("rules", None, *rules)

doc = nlp("Education of children was our revenue earning secondary business.")
matches = matcher(doc)
print([doc[start:end].text for _, start, end in matches])

, что будет печатать

['Education of children', 'earning secondary business']
...