Процесс НЛП для объединения общих словосочетаний

У меня есть корпус, в котором я использую пакет tm в R (а также отражаю тот же скрипт в NLTK в python). Я работаю с униграммами, но хотел бы, чтобы какой-нибудь синтаксический анализатор объединял слова, обычно совмещенные, как одно слово, т. е. я хотел бы перестать видеть «Новый» и «Йорк» по отдельности в моем набор данных, когда они встречаются вместе, и видеть эту конкретную пару, представленную как «Нью-Йорк», как если бы это было одно слово, и рядом с другими униграммами.

Как называется этот процесс преобразования значимых, обычных n-грамм в ту же основу, что и униграммы? Разве это не вещь? Наконец, как будет выглядеть tm_map для этого?

mydata.corpus <- tm_map(mydata.corpus, fancyfunction)

И/или в питоне?


person Mittenchops    schedule 20.12.2013    source источник
comment
Это называется поиском словосочетаний. Типичные подходы сначала фильтруют по тегу POS, затем вычисляют взаимную информацию и сообщают обо всех биграммах, для которых MI превышает некоторый порог. В Основы статистической обработки естественного языка есть раздел, посвященный этой проблеме.   -  person Fred Foo    schedule 20.12.2013
comment
Возможно, распознавание именованных объектов?   -  person arturomp    schedule 21.12.2013
comment
Ссылка NLTK на словосочетания: nltk.org/howto/collocations.html и глава, упомянутая @ Ларсман: nlp.stanford.edu/fsnlp/promo/colloc.pdf   -  person arturomp    schedule 21.12.2013
comment
@amp, отличная ссылка на страницу словосочетаний на NLTk !!! Страницы Howto для NLTK очень полезны для разработчиков, которым лень читать туториалы =)   -  person alvas    schedule 03.01.2014
comment
Другой подход заключается в использовании полноценного синтаксического анализатора (например, nlp.stanford.edu/software). /lex-parser.shtml), а затем рекурсивно проанализируйте дерево синтаксического анализа, просматривая узлы словосочетаний существительных (NP). Я нашел этот подход наиболее успешным. Подробнее здесь: aaai.org/ocs/index. php/INT/INT7/бумага/просмотр/9253   -  person Josep Valls    schedule 28.06.2015


Ответы (1)


Недавно у меня был похожий вопрос, и я играл с словосочетаниями.

Это было решение, которое я выбрал для определения пар словосочетаний:

from nltk import word_tokenize
from nltk.collocations import *

text = <a long text read in as string string>

tokenized_text = word_tokenize(text)

bigram_measures = nltk.collocations.BigramAssocMeasures(tokenized_text)
finder = BigramCollocationFinder.from_words()
scored = finder.score_ngrams(bigram_measures.raw_freq)

sorted(scored, key=lambda s: s[1], reverse=True)
person Sylvia    schedule 20.03.2017
comment
Он дает один и тот же балл, независимо от того, слова действительно сочетаются или нет. - person Parvez Khan; 22.01.2020