我有一个特定单词列表('令牌'),需要在纯文本中找到所有这些单词(如果有的话)。我更喜欢使用Pandas来加载文本并执行搜索。我正在使用pandas,因为我的短文本集合带有时间戳,并且很容易将这些短文本组织成单个数据结构中的pandas。
例如:
考虑在Pandas上传的一系列获取的twitters:
twitts
0 today is a great day for BWM
1 prices of german cars increased
2 Japan introduced a new model of Toyota
3 German car makers, such as BMW, Audi and VW mo...
以及汽车制造商名单:
list_of_car_makers = ['BMW', 'Audi','Mercedes','Toyota','Honda', 'VW']
理想情况下,我需要获得以下数据框:
twitts cars_mentioned
0 today is a great day for BMW [BMW]
1 prices of german cars increased []
2 Japan introduced a new model of Toyota [Toyota]
3 German car makers, such as BMW, Audi and VW mo... [BMW, Audi, VW]
我对NLP和文本挖掘方法都很陌生,我在互联网上阅读/搜索了很多有关该主题的资料。我的猜测是我可以使用regex
并使用re.findall()
,但是我需要遍历整个数据帧的令牌列表(汽车制造商)。
是否有更简洁的方法来完成这项简单的任务,尤其是使用Panads?
答案 0 :(得分:5)
您可以使用pandas .str
methods,尤其是.findall
:
df['cars_mentioned'] = df['twitts'].str.findall('|'.join(list_of_car_makers))
答案 1 :(得分:3)
df['cars_mentioned'] = df['twitts'].apply(lambda x: [c for c in list_of_car_makers if c in x])
答案 2 :(得分:1)
您可以使用re.findall
和filter
。
list(filter((lambda x: re.findall(x, twitt)), list_of_car_makers))
Python示例:
list_of_car_makers = ['BMW', 'Audi','Mercedes','Toyota','Honda', 'VW']
def cars_mentioned(twitt):
return list(filter((lambda x: re.findall(x, twitt)), list_of_car_makers))
cars_mentioned('German car makers, such as BMW, Audi and VW mo...') >> ['BMW', 'Audi', 'VW']