【发布时间】:2018-08-13 13:34:43
【问题描述】:
正如标题所解释的,这个正则表达式模式基本上检查描述变量以匹配集合内的单词组合,例如:
set = ["oak", "wood"]
然后,如果它在 5 个单词间距内找到这 2 个单词,它将返回这些单词。但是,我需要它来返回匹配的句子。因此,例如,如果描述是:
description = "...would be a lovely addition to any home. This lovely oak hard wood table comes in a variety of sizes. Another great reason to consider..."
我希望它返回包含关键字的整个句子,而不是只返回匹配的单词。
这就是我目前正在使用的,显然只是返回匹配的集合对。
re.findall(r"\b(?:(%s)\W+(?:\w+\W+){0,5}?(%s)|(%s)\W+(?:\w+\W+){0,5}?(%s))\b" % (set[0], set[1], set[1], set[0]), description)
我也知道,我相信这种模式将超越单个句子进行匹配,因此您可能会遇到这样的情况,即它会在 2 个不同的句子中找到匹配项。如果可能的话,我还想找到一种方法,将匹配限制为只能在同一个句子中进行。
如果能得到任何帮助,我将不胜感激。
编辑:只是为了澄清我想要的输出是:
"This lovely oak hard wood table comes in a variety of sizes."
因为这是包含匹配关键字对的句子。
谢谢!
【问题讨论】:
-
@KyleA 我能说我非常感谢你这么说。由于这里有些人的态度和心态,我从字面上从来没有在 StackOverflow 上问过任何问题。我花了好几个小时确保没有发布任何类似的内容,因此我不会冒犯任何人,然后确保问题尽可能简洁且解释清楚。
-
我宁愿采用不同的方式:先拆分句子(使用例如
nltk,查找sent_tokenize())并在每个句子中搜索您的单词。 -
顺序重要吗?你传递了 4 个单词,你在任何地方都找到了一个带有这 4 个单词的句子。还是必须按顺序出现?
-
@Julio 关键字对的顺序并不重要,但要避免误报,它们的接近度很重要。