Как перебирать строки, содержащие текст, и создавать биграммы с помощью python

В файле 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)

Откуда должны браться Company & Code?

Scott Hunter 02.02.2023 21:03
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
69
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ваш 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

Спасибо, все заработало. Но также как мне получить это в этом формате ,ты),(ты,делаешь)]

Dhanya_mj 03.02.2023 11:38

обновленный ответ, чтобы соответствовать ожидаемому выходному формату

xprilion 03.02.2023 12:21

Это сработало как шарм. Спасибо. Есть ли универсальный код, который я могу использовать для переключения между униграммой, биграммой и триграммой? input_list = list(ngrams(tokens,2)) где я могу изменить число на 3, чтобы получить триграмму

Dhanya_mj 03.02.2023 13:31

В numpy есть модуль ngram. Кроме того, подумайте о том, чтобы проголосовать за ответ, если он сработал :)

xprilion 03.02.2023 20:17

Вы можете использовать itertools.permutations()

s.str.split().map(lambda x: list(itertools.permutations(x,2))[::len(x)])

Другие вопросы по теме