В файле Excel у меня есть 5 столбцов и 20 строк, из которых одна строка содержит текстовые данные, как показано ниже.
df['Content'] строка содержит:
0 this is the final call
1 hello how are you doing
2 this is me please say hi
..
.. and so on
Я хочу создавать биграммы, пока они остаются привязанными к исходной таблице.
Я попытался применить приведенную ниже функцию для перебора строк.
def find_bigrams(input_list):
bigram_list = []
for i in range(len(input_list)-1):
bigram_list.append(input_list[1:])
return bigram_list
И попытался вернуть строку в свою таблицу, используя:
df['Content'] = df['Content'].apply(find_bigrams)
Но я получаю следующую ошибку:
0 None
1 None
2 None
Я ожидаю результат, как показано ниже
Company Code Content
0 xyz uh-11 (this,is),(is,the),(the,final),(final,call)
1 abc yh-21 (hello,how),(how,are),(are,you),(you,doing)






Ваш input_list на самом деле не список, это строка.
Попробуйте функцию ниже:
def find_bigrams(input_text):
input_list = input_text.split(" ")
bigram_list = list(map(tuple, zip(input_list[:-1], input_list[1:])))
return bigram_list
Спасибо, все заработало. Но также как мне получить это в этом формате ,ты),(ты,делаешь)]
обновленный ответ, чтобы соответствовать ожидаемому выходному формату
Это сработало как шарм. Спасибо. Есть ли универсальный код, который я могу использовать для переключения между униграммой, биграммой и триграммой? input_list = list(ngrams(tokens,2)) где я могу изменить число на 3, чтобы получить триграмму
В numpy есть модуль ngram. Кроме того, подумайте о том, чтобы проголосовать за ответ, если он сработал :)
Вы можете использовать itertools.permutations()
s.str.split().map(lambda x: list(itertools.permutations(x,2))[::len(x)])
Откуда должны браться Company & Code?