我举了一个简单的例子来描述这个问题。
输入文本:
韦恩鲁尼是一名英格兰足球运动员,他是曼联的前锋。鲁尼·鲁尼( Rooney )在对阵澳大利亚的友谊赛中首次代表国家队出场,成为英格兰最年轻的球员。西奥·沃尔科特在2006年5月打破了鲁尼的出场纪录36天。
输入关键词:韦恩·鲁尼
预期输出(关键词计数):3(韦恩鲁尼,鲁尼,鲁尼)
所以,它不仅包括“韦恩鲁尼”,还包括其他类似的词。
我已经搜索过了,我得到了这个正则表达式:
$keyword_count = preg_match_all("/(\w*(?:wayne|rooney)\w*)/i", $source, $res);但它给了我4作为输出。它把“韦恩·鲁尼”作为两个不同的关键词。
有人能帮我构造正确的公式吗?Regex真的是这方面最有效的解决方案吗?我有大量的文本要搜索。还有其他解决方案,例如PHP文本挖掘库吗?
非常感谢。
发布于 2011-07-25 07:50:47
试试这个正则表达式:
(?i)(\b(?:wayne(?:'s)?\s*)?rooney(?:'s)?\b)如果解析字符串的常规规则数量有限,regex是解决问题的适当方法。通常情况下,您应该使用其他方法(可能是几个regex)。
发布于 2011-07-25 07:52:13
也许这是有用的,或者是regex的另一种选择:
http://php.net/manual/en/function.levenshtein.php
距离
发布于 2011-07-25 07:58:13
对于这种特殊情况,您可以这样做
Wayne(?:\sRooney[\w']*)?|Rooney[\w']*看吧,在Regexr上
它说:搜索Wayne Rooney或Rooney (每个都可以跟着[\w']*),但是对于第一部分,(?:\sRooney[\w']*)?是可选的。
https://stackoverflow.com/questions/6813083
复制相似问题