【发布时间】:2011-09-26 18:34:56
【问题描述】:
我有一堆域,我想将它们分解成单词。我从 wordlist.sourceforge.net 下载了 wordlist 并开始编写暴力类型的脚本来通过字典列表运行每个域。
问题是我无法让它产生足够好的结果。我做的简单脚本是这样的:
foreach($domains as $dom) {
$orig_dom = $dom;
foreach($words as $w) {
$pos = stristr($dom,$w);
if($pos) {
$wd[$orig_dom][] = $w;
}
}
}
$words 是字典数组,domains 只是一个域名数组。
结果如下所示:
[aheadsoftware] => Array
(
[0] => ahead
[1] => head
[2] => heads
[3] => soft
[4] => software
[5] => ware
从技术上讲,它可以工作,但我不知道如何编写代码的诀窍是让脚本明白,如果你匹配 'ahead',你就不再有 'head' 或 'heads' 了。它还应该理解选择“软件”而不是“软件”和“软件”。是的,我知道,语言计算的世界是纯粹的痛苦;)
【问题讨论】:
-
为了展示这种方法的内在缺陷,看看它为“ThePenIsMightierThanTheSword.com”提供了什么(我已经将它大写以显示预期的内容;这不一定会出现你的算法)
-
这正是我要说的。您能提出更好的方法吗?
-
并非如此——英语是这类事情的噩梦。当我们不得不做类似的事情时,我们与第三方 (DomainsBot) 一起做,但即使他们也没有产生很好的结果。
-
在某些时候,您必须选择是采用贪婪(即最长词)还是非贪婪(最短词)方法。由于存在诸如您提供的示例之类的歧义,因此无法绕过该决定。那是除非你指定某种上下文无关的语法来配合它,但祝你好运尝试使英语上下文无关。
标签: php tagging linguistics