我已经定义了一个函数,它返回包含来自具有'文本'的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'我的功能也应该能够返回这句话。
答案 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()
表达式创建一个正则表达式模式对象,它只包含一组备选方案。
这允许您扫描整个句子,同时查找所有搜索到的单词。