Обработка текста на Python: NLTK и панды
Я ищу эффективный способ построения матрицы документов термина в Python, который можно использовать вместе с дополнительными данными.
У меня есть некоторые текстовые данные с несколькими другими атрибутами. Я хотел бы провести некоторый анализ текста, и я бы хотел иметь возможность соотносить функции, извлеченные из текста (например, отдельные токены слов или темы LDA), с другими атрибутами.
Мой план состоял в том, чтобы загрузить данные в виде фрейма данных pandas, и тогда каждый ответ будет представлять документ. К сожалению, я столкнулся с проблемой:
import pandas as pd
import nltk
pd.options.display.max_colwidth = 10000
txt_data = pd.read_csv("data_file.csv",sep="|")
txt = str(txt_data.comment)
len(txt)
Out[7]: 71581
txt = nltk.word_tokenize(txt)
txt = nltk.Text(txt)
txt.count("the")
Out[10]: 45
txt_lines = []
f = open("txt_lines_only.txt")
for line in f:
txt_lines.append(line)
txt = str(txt_lines)
len(txt)
Out[14]: 1668813
txt = nltk.word_tokenize(txt)
txt = nltk.Text(txt)
txt.count("the")
Out[17]: 10086
Обратите внимание, что в обоих случаях текст был обработан таким образом, что только все, кроме пробелов, букв и,.?! был удален (для простоты).
Как вы можете видеть, поле панд, преобразованное в строку, возвращает меньше совпадений, а длина строки также короче.
Есть ли способ улучшить вышеуказанный код?
Также,str(x)
создает 1 большую строку из комментариев, в то время как[str(x) for x in txt_data.comment]
создает объект списка, который не может быть разбит на пакет слов. Каков наилучший способ произвестиnltk.Text
объект, который будет сохранять индексы документов? Другими словами, я ищу способ создать матрицу срочных документов, эквивалент R дляTermDocumentMatrix()
отtm
пакет.
Большое спасибо.