使用Pandas搜索文本中的所有匹配项

时间:2018-02-03 22:35:17

标签: python regex pandas nlp

我有一个特定单词列表('令牌'),需要在纯文本中找到所有这些单词(如果有的话)。我更喜欢使用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?

3 个答案:

答案 0 :(得分:5)

您可以使用pandas .str methods,尤其是.findall

df['cars_mentioned'] = df['twitts'].str.findall('|'.join(list_of_car_makers))

答案 1 :(得分:3)

使用pandas.DataFrame.apply

df['cars_mentioned'] = df['twitts'].apply(lambda x: [c for c in list_of_car_makers if c in x])

答案 2 :(得分:1)

您可以使用re.findallfilter

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']