字标记器中的子字符串匹配

时间:2016-11-30 06:25:02

标签: python pandas nltk

我已经定义了一个函数,它返回包含来自具有'文本'的excel文件中包含指定单词的句子。柱。 在@Julien Marrec的帮助下,我重新定义了函数,以便我可以将多个单词作为参数传递,如下所示

words = ['word1','word2','word3'.......]
df['text'].apply(lambda text: [sent for sent in sent_tokenize(text)
                                   if any(True for w in word_tokenize(sent) 
                                           if w.lower() in searched_words)])

但问题是数据集非常庞大(通常在GB中)和非结构化。有人可以建议我如何才能发生子串匹配,即如果一个句子有' xxxxxword1yyyyy'我的功能也应该能够返回这句话。

1 个答案:

答案 0 :(得分:0)

如果您不关心单词边界,则可以跳过单词标记化并与正则表达式匹配。

然而,这可能会给你很多你没想到的比赛。例如,搜索条件" tin"和#"国家"两者都会匹配"拖延"。如果这是您想要的,您可以执行以下操作:

import re

fsa = re.compile('|'.join(re.escape(w.lower()) for w in searched_words))
df['text'].apply(lambda text: [sent for sent in sent_tokenize(text)
                               if fsa.search(sent)])

re.compile()表达式创建一个正则表达式模式对象,它只包含一组备选方案。 这允许您扫描整个句子,同时查找所有搜索到的单词。