如何在 Pandas 数据框中应用 NLTK word_tokenize 库以获取 Twitter 数据?

Posted

技术标签:

【中文标题】如何在 Pandas 数据框中应用 NLTK word_tokenize 库以获取 Twitter 数据?【英文标题】:How to apply NLTK word_tokenize library on a Pandas dataframe for Twitter data? 【发布时间】:2017-10-25 16:44:50 【问题描述】:

这是我用于 twitter 语义分析的代码:-

import pandas as pd
import datetime
import numpy as np
import re
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.stem.wordnet import WordNetLemmatizer
from nltk.stem.porter import PorterStemmer

df=pd.read_csv('twitDB.csv',header=None, 
sep=',',error_bad_lines=False,encoding='utf-8')

hula=df[[0,1,2,3]]
hula=hula.fillna(0)
hula['tweet'] = hula[0].astype(str) 
+hula[1].astype(str)+hula[2].astype(str)+hula[3].astype(str) 
hula["tweet"]=hula.tweet.str.lower()

ho=hula["tweet"]
ho = ho.replace('\s+', ' ', regex=True) 
ho=ho.replace('\.+', '.', regex=True)
special_char_list = [':', ';', '?', '', ')', '', '(']
for special_char in special_char_list:
ho=ho.replace(special_char, '')
print(ho)

ho = ho.replace('((www\.[\s]+)|(https?://[^\s]+))','URL',regex=True)
ho =ho.replace(r'#([^\s]+)', r'\1', regex=True)
ho =ho.replace('\'"',regex=True)

lem = WordNetLemmatizer()
stem = PorterStemmer()
fg=stem.stem(a)

eng_stopwords = stopwords.words('english') 
ho = ho.to_frame(name=None)
a=ho.to_string(buf=None, columns=None, col_space=None, header=True, 
index=True, na_rep='NaN', formatters=None, float_format=None, 
sparsify=False, index_names=True, justify=None, line_width=None, 
max_rows=None, max_cols=None, show_dimensions=False)
wordList = word_tokenize(fg)                                     
wordList = [word for word in wordList if word not in eng_stopwords]  
print (wordList)

输入,即a:-

                                              tweet
0     1495596971.6034188::automotive auto ebc greens...
1     1495596972.330948::new free stock photo of cit...

以这种格式获取输出(wordList):-

tweet
 0
1495596971.6034188
:
:automotive
auto

我只想以行格式输出一行。我该怎么做? 如果你有更好的 twitter 语义分析代码,请分享给我。

【问题讨论】:

【参考方案1】:

简而言之:

df['Text'].apply(word_tokenize)

或者,如果您想添加另一列来存储标记化的字符串列表:

df['tokenized_text'] = df['Text'].apply(word_tokenize) 

有专门为 twitter 文本编写的标记器,请参阅 http://www.nltk.org/api/nltk.tokenize.html#module-nltk.tokenize.casual

使用nltk.tokenize.TweetTokenizer

from nltk.tokenize import TweetTokenizer
tt = TweetTokenizer()
df['Text'].apply(tt.tokenize)

类似于:

How to apply pos_tag_sents() to pandas dataframe efficiently

how to use word_tokenize in data frame

How to apply pos_tag_sents() to pandas dataframe efficiently

Tokenizing words into a new column in a pandas dataframe

Run nltk sent_tokenize through Pandas dataframe

Python text processing: NLTK and pandas

【讨论】:

我很高兴答案有所帮助。 如果您不去除代码中不相关的部分并且只发布对您的问题至关重要的信息,那么您的问题将很容易解决。编辑您提出的新问题;P 当然,会这样做并再次询问。谢谢:) @alvas,你知道我为什么会得到:TypeError: Expected string or bytes-like object when running your code on my pandas dataframe column with text.我唯一的区别是我使用 sent_tokenizer 只是拆分成句子而不是单词

以上是关于如何在 Pandas 数据框中应用 NLTK word_tokenize 库以获取 Twitter 数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python Pandas 从 NLTK 运行朴素贝叶斯?

如何从 pandas 数据框中的大型每日 JSON 数据集计算平均月值?

如何根据列中的最新日期聚合 pandas 数据框中的行?

如何在 Pandas 数据框中的特定位置插入一列? (更改熊猫数据框中的列顺序)

pandas:如何将列表存储在数据框中? [复制]

在 Python 中使用 NLTK 和 Pandas 解压的值太多