检查pandas数据框中是否存在特定单词

时间:2019-04-11 11:53:49

标签: python-3.x pandas

我有一个关键字列表,这些关键字存储在电子表格中,然后通过单列“关键字”转换为数据框。我正在使用此数据框检查存储在其中的关键字是否存在于其他数据框(“文本数据框”)中的文本中。

 1) keywords dataframe

     keywords

  1   ice cream
  2   ice cone 
  3     truck
  4   Ice cream truck


 2) text dataframe


       text

  1  ice cream truck just arrived 
  2  can I have some ice?
  3  Ice quickly melts

我目前拥有的功能是检查文本数据框中是否仅存在特定的关键字/短语

def check_keyword():

    keyword = text_dataframe[(text_dataframe.text.apply(lambda x: any(term in x for term in keywords_dataframe['keywords'])))]

    if len(keyword) == 0:
          return pd.DataFrame(columns=['c1', 'c2', 'c3'], index=[])
    else:
          return keyword

但是,问题是check_keyword函数还会标记包含不想标记的单词的句子。例如,代替仅标记确切的短语(“冰淇淋”,​​“冰锥”等),它还标记单词“ ice”和“ Ice”。解决此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

使用带有Series.str.extract的单词边界作为第一个匹配关键字:

pat = '|'.join(r"\b{}\b".format(x) for x in keywords_dataframe['keywords'])
text_dataframe['flag'] = (text_dataframe['text'].str.extract('('+ pat + ')', expand=False)
                                .fillna('no match'))

print (text_dataframe)
                           text       flag
1  ice cream truck just arrived  ice cream
2          can I have some ice?   no match
3             Ice quickly melts   no match