Вопрос или проблема
У меня есть DataFrame с 4 колонками: ‘Заголовок’, ‘Body_ID’, ‘Сторона’, ‘articleBody’, где ‘Заголовок’ и ‘articleBody’ содержат очищенные и токенизированные слова. Я хочу найти биграмы, используя nltk, и на данный момент у меня есть следующее:
bigram_measures = nltk.collocations.BigramAssocMeasures()
articleBody_biGram_finder = df_2['articleBody'].apply(lambda x: BigramCollocationFinder.from_words(x))
У меня возникают проблемы с последним шагом применения articleBody_biGram_finder
с bigram_measures
. Я пробовал несколько итераций лямбда с использованием списковых выражений, но ничего не получается.
Мои самые последние попытки:
df_2['articleBody_scored'] = score_ngrams(bigram_measures.raw_freq) for item in articleBody_biGram_finder
df_2['articleBody_scored'] = articleBody_biGram_finder.apply(lambda x: BigramCollocationFinder.score_ngrams(bigram_measures.raw_freq))
df_2['bigram_scored'] = df_2['bigram_finder'].apply(lambda x: x.score_ngrams(bigram_measures.raw_freq))
Ответ или решение
Для нахождения биграмм в вашем DataFrame с использованием библиотеки NLTK в Python, давайте внимательно разберёмся с вашей задачей. Вы уже на правильном пути, применяя BigramCollocationFinder
. Однако, для успешного завершения процесса нужно немного доработать ваш код.
Пошаговое руководство по нахождению биграмм
1. Подготовка данных
Предполагается, что у вас есть DataFrame df_2
с колонками, содержащими токенизированные слова в 'Headline'
и 'articleBody'
. Убедитесь, что оба столбца имеют список токенов (и не строки).
2. Импорт необходимых библиотек
Вначале убедитесь, что вы импортировали необходимые библиотеки.
import pandas as pd
import nltk
from nltk.collocations import BigramCollocationFinder
from nltk.metrics import BigramAssocMeasures
3. Создание биграмм
Ваша первоначальная попытка создания объекта BigramCollocationFinder
была правильной. Однако, чтобы правильно получить оцененные биграммы, вам нужно несколько изменить подход.
# Задаём меры для биграмм
bigram_measures = BigramAssocMeasures()
# Функция для получения биграмм и их оценок
def find_bigrams(article):
bigram_finder = BigramCollocationFinder.from_words(article)
# Используем raw_freq для оценки биграмм
scored = bigram_finder.score_ngrams(bigram_measures.raw_freq)
return scored
# Применяем функцию к колонке 'articleBody'
df_2['bigram_scored'] = df_2['articleBody'].apply(find_bigrams)
4. Результаты
Теперь в колонке bigram_scored
вы будете иметь список биграмм каждой статьи с их оценками по частоте.
5. Дополнительные улучшения
Вы можете отфильтровать биграммы по частоте, удалить редкие биграммы с низкими оценками или визуализировать результаты. Например, чтобы отобрать лишь биграммы с определённой частотой, вы можете сделать следующее:
def filter_bigrams(scored_bigrams, min_freq):
return [(bigram, score) for bigram, score in scored_bigrams if score > min_freq]
df_2['filtered_bigrams'] = df_2['bigram_scored'].apply(lambda x: filter_bigrams(x, 0.01))
Этот код отфильтрует биграммы, оставляя только те, которые имеют частоту больше заданного порога (например, 0.01).
Заключение
Следуя этому руководству, вы сможете легко находить и оценивать биграммы в вашем DataFrame. Не забудьте проверить, что ваши данные корректно токенизированы, и вся необходимая библиотека NLTK установлена. Теперь вы готовы к глубокому анализу текстов, используя биграммы, что значительно улучшит ваши навыки обработки естественного языка.