Есть ли в Spacy особенность двух или трех граммов? - PullRequest
0 голосов
/ 03 декабря 2018

Приведенный ниже код разбивает предложение на отдельные токены, и вывод будет таким, как показано ниже:

 "cloud"  "computing"  "is" "benefiting"  " major"  "manufacturing"  "companies"


import en_core_web_sm
nlp = en_core_web_sm.load()

doc = nlp("Cloud computing is benefiting major manufacturing companies")
for token in doc:
    print(token.text)

В идеале я хотел бы прочитать «облачные вычисления» вместе, поскольку это технически одно слово.

В основном я ищу би грамм.Есть ли какая-либо особенность в Spacy, которая позволяет Bi или Tri грамм?

Ответы [ 2 ]

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

У меня была похожая проблема (биграммы, триграммы, как ваши "облачные вычисления").Я сделал простой список n-грамм, word_3gram, word_2grams и т. Д., С граммой в качестве базовой единицы (cloud_computing).Предположим, у меня есть предложение «Я люблю облачные вычисления, потому что это дешево».Предложение_2gram: «I_like», «like_cloud», «cloud_computing», «computing_because» ... Сравнивая, что ваш список биграмм только «cloud_computing» распознается как допустимый биграмм;все остальные биграммы в предложении являются искусственными.Чтобы восстановить все другие слова, вы просто берете первую часть других слов,

"I_like".split("_")[0] -> I; 
"like_cloud".split("_")[0] -> like
"cloud_computing" -> in bigram list, keep it. 
  skip next bi-gram "computing_because" ("computing" is already used)
"because_it's".split("_")[0]" -> "because" etc.

Чтобы также захватить последнее слово в предложении («дешево»), я добавил токен «EOL».Я реализовал это в Python, и скорость была в порядке (500 тыс. Слов за 3 минуты), процессор i5 с 8G.В любом случае, вы должны сделать это только один раз.Я нахожу это более интуитивным, чем официальный подход (в стиле spacy).Это также работает для не-пространственных структур.

Я делаю это перед официальным токенизацией / лемматизацией, так как вы получите «облачные вычисления» в качестве возможного биграмма.Но я не уверен, что это лучший / правильный подход.Предложения?

Андреас

PS: оставьте строку, если вы хотите полный код, я продезинфицирую код и выложу его здесь (и, возможно, github).

0 голосов
/ 04 декабря 2018

Spacy позволяет обнаруживать существительные куски.Таким образом, чтобы проанализировать ваши существительные фразы как отдельные сущности, сделайте следующее:

/ 1.Обнаружить куски существительного https://spacy.io/usage/linguistic-features#noun-chunks

/ 2.Объединить существительные куски / 3.Выполните повторный анализ зависимостей, теперь «облачные вычисления» будут анализироваться как единое целое.

>>> import spacy
>>> nlp = spacy.load('en')
>>> doc = nlp("Cloud computing is benefiting major manufacturing companies")
>>> list(doc.noun_chunks)
[Cloud computing, major manufacturing companies]
>>> for noun_phrase in list(doc.noun_chunks):
...     noun_phrase.merge(noun_phrase.root.tag_, noun_phrase.root.lemma_, noun_phrase.root.ent_type_)
... 
Cloud computing
major manufacturing companies
>>> [(token.text,token.pos_) for token in doc]
[('Cloud computing', 'NOUN'), ('is', 'VERB'), ('benefiting', 'VERB'), ('major manufacturing companies', 'NOUN')]
>>> 
...