Как создать только биграмм / триграмму - PullRequest
0 голосов
/ 16 января 2020

Есть ли способ для Gensim генерировать строго биграммы, триграммы в списке слов?

Я могу успешно генерировать униграммы, биграммы, триграммы, но я хотел бы извлечь только биграммы, триграммы.

Например, в списке ниже:

words = [['the', 'mayor', 'of', 'new', 'york', 'was', 'there'],["i","love","new","york"],["new","york","is","great"]]

Я использую

bigram = gensim.models.Phrases(words, min_count=1, threshold=1)
bigram_mod = gensim.models.phrases.Phraser(bigram)
words_bigram = [bigram_mod[doc] for doc in words]

Это создает список униграмм и биграмм следующим образом:

[['the', 'mayor', 'of', 'new_york', 'was', 'there'],
 ['i', 'love', 'new_york'],
 ['new_york', 'is', 'great']]

У меня вопрос: есть ли способ (кроме регулярных выражений) строго извлекать биграммы, чтобы в этом примере результатом был только "new_york"?

1 Ответ

0 голосов
/ 16 января 2020

Это не встроенная опция функциональности gensim Phrases.

Если мы можем предположить, что ни в одном из ваших исходных униграмм не было символа '_', шаг по выбору только токенов с '_' не должен быть слишком дорогим (и не требует полных регулярных выражений). ). Например, вашей последней строкой может быть:

words_bigram = [ [token for token in bigram_mod[doc] if '_' in token] for doc in words ]

(Вы можете изменить символ присоединения, если по какой-то причине в ваших надписях есть подчеркивания, и вы не хотите, чтобы их перепутали с сочетанием Phrases. биграммы.)

Если ничего из этого не достаточно хорошо, вы потенциально можете посмотреть на код в gensim, который фактически оценивает и объединяет униграммы в биграммы ...

https://github.com/RaRe-Technologies/gensim/blob/fbc7d0952f1461fb5de3f6423318ae33d87524e3/gensim/models/phrases.py#L300

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

...