Как найти биграммы, которые разделены окном из N токенов? - PullRequest
0 голосов
/ 19 февраля 2019

Я пытался найти способ получить все биграммы из фрагмента текста, которые не обязательно являются последовательными словами, но разделены на N слов в тексте, используя python.Хотя я нашел много ответов о том, как найти последовательные биграммы, я не нашел четкого ответа относительно непоследовательных биграмм.

Я использовал sklearn и CountVectorizer, как код ниже, чтобы найти мои биграммы, но я не знаю, сможет ли он выполнить эту задачу.

from sklearn.feature_extraction.text import CountVectorizer

#finding bigrams and their frequency
bigram_vectorizer = CountVectorizer(ngram_range=(2,2))
X = bigram_vectorizer.fit_transform(["i love coding with python"])
print(bigram_vectorizer.get_feature_names())
bigram_frequency = X.toarray()

Что печатает:

["i love", "love coding", "coding with", "with python"]

Ожидаемый результат, при наличии фрагмента текста sentence= "i love coding with python" должен возвращать что-то вроде:

[('i', 'love'), ('i', 'coding'), ('i', 'with'), ... ,('coding', 'with'), 
('coding', 'python'), ('with', 'python')]

1 Ответ

0 голосов
/ 19 февраля 2019

Нужно ли решать проблему с помощью sklearn?Чтобы найти биграммы, используйте эту функцию:

 def nonConsBigram(text):
     x = text.split(' ')
     ret = []
     while len(x) > 1:
         current = x[0]
         for i in x[1:]:
             ret += [(current, i)]
         x = x[1:]
     return ret

Результат:

[('i', 'love'),
 ('i', 'coding'),
 ('i', 'with'),
 ('i', 'python'),
 ('love', 'coding'),
 ('love', 'with'),
 ('love', 'python'),
 ('coding', 'with'),
 ('coding', 'python'),
 ('with', 'python')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...