在PHP中需要帮助Regex,找到类似的单词

时间:2011-07-25 07:47:41

标签: php regex count keyword

我举一个例子来轻松描述问题。

输入文字:
Wayne Rooney 是一名英格兰足球运动员,曾效力于曼联。 鲁尼成为英格兰最年轻的球员,因为他在与澳大利亚的友谊赛中获得了第一个上限。沃尔科特于2006年5月将鲁尼的​​出场记录打破了36天。

输入关键字:wayne rooney

预期输出(关键字数量):3(Wayne rooney,鲁尼,鲁尼)

所以,它不仅算“韦恩鲁尼”,还包括其他类似的词。

我搜索了SO,我得到了这个正则表达式:

$keyword_count = preg_match_all("/(\w*(?:wayne|rooney)\w*)/i", $source, $res);

但它给了我4作为输出。它将“wayne rooney”视为两个不同的关键词。

有人可以帮我构建正确的公式吗? Regex真的是最有效的解决方案吗?我有大量的文字要搜索。任何其他解决方案,例如PHP的文本挖掘库?

非常感谢。

4 个答案:

答案 0 :(得分:1)

试试这个正则表达式:

(?i)(\b(?:wayne(?:'s)?\s*)?rooney(?:'s)?\b)

如果要解析字符串的常规规则数量有限,则正则表达式适合解决您的问题。在一般情况下,您应该使用其他方法(可能是几个正则表达式)。

答案 1 :(得分:0)

答案 2 :(得分:0)

对于这种特殊情况,你可以做这样的事情

Wayne(?:\sRooney[\w']*)?|Rooney[\w']*

here on Regexr

它说:搜索Wayne RooneyRooney(每个都可以跟[\w']*),但对于第一部分,(?:\sRooney[\w']*)?是可选的。

答案 3 :(得分:0)

您是在尝试匹配一段文字中的单个已知名称,还是实际上是在尝试识别与“已知人”或“名称”相匹配的内容?

如果是后者那么你可能会使用像OpenCalais那样约束已知类型'人'的东西(谁知道,也许有'足球运动员'分类法。)

以下是analysis of similar工具。