Как генерировать только биграммы / триграммы

Есть ли способ для 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 ответ


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

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

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

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

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

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

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


Есть идеи?

10000