Nlp 将域名拆分为组成词(如果可能)?

Nlp 将域名拆分为组成词(如果可能)?,nlp,algorithm,dynamic-programming,np-complete,Nlp,Algorithm,Dynamic Programming,Np Complete,我想把一个域名分解成组成词和数字,例如 iamadomain11.com=['i','am','a','domain','11'] 我该怎么做?我知道可能有多个集合,但是,我现在甚至还可以,只得到一个集合的可能性 这是一个有趣的问题!首先你需要一本字典。出于性能原因,将其存储在hashset中(可能可以使用python中的dictionary类型)。然后,您可以迭代每个可能的字符串(“i”、“ia”、“iam”、“n11”、“1”、“11”、“1”),并在字典中检查匹配项。然后,迭代这些匹配,直

我想把一个域名分解成组成词和数字,例如

iamadomain11.com=['i','am','a','domain','11']


我该怎么做?我知道可能有多个集合,但是,我现在甚至还可以,只得到一个集合的可能性

这是一个有趣的问题!首先你需要一本字典。出于性能原因,将其存储在hashset中(可能可以使用python中的dictionary类型)。然后,您可以迭代每个可能的字符串(“i”、“ia”、“iam”、“n11”、“1”、“11”、“1”),并在字典中检查匹配项。然后,迭代这些匹配,直到得到一个没有重叠的连续集


这将是一场又快又脏的比赛。可能有更快的方法可以做到这一点。

这听起来类似于汉语的标记问题,即单词之间没有空格。本段摘自Manning,Raghavan&Schütze的《信息检索导论》,可在线获取:

在这种情况下,这种现象达到了极限 使用主要的东亚语言(例如。, 中国、日本、韩国和泰国), 其中文本是在没有任何 单词之间的空格。[……]一种方法 下面是执行分词的步骤 作为优先语言处理。 分词的方法因人而异 词汇量大,学习英语 最长的词汇量与一些单词相匹配 对未知单词的启发式搜索 机器学习序列的使用 模型,如隐马尔可夫模型 或经过训练的条件随机场 过分词


我建议将贪婪字典匹配作为第一步,然后添加启发式来处理最常见的故障情况。

这在O'Reilly Media book中得到了解决。在第14章“自然语言语料库数据”中,他创建了一个拆分器,使用一个巨大的免费令牌频率数据集,在Python中完全按照您的要求进行拆分。

['i'、'a'、'ma'、'do'、'ma'、'In'、'11']
这听起来像是NP难的,或者需要动态编程。我编辑了这些标签,以引起那些可能比我更精通这类算法的人的注意。谢谢Ken!让我们期待有人回应。上周有人问了这个问题,得到了比你更好的答案:这将是过度未优化的,所花费的时间将是巨大的@演示:当你试图拆分一个像你的典型域名一样小的字符串时,可能不会。他的方法依赖于使用一个特定单词的连续字母创建所有可能的n-gram。你知道某个地方有一本很大的英语单词词典吗?它的计算成本肯定很高。你可能想使用字典,因为用启发式的方法做这件事会是一场噩梦。将单词存储在哈希集中会导致查找O(1)。您也不必计算和存储任何n-gram。您的实现可以按顺序匹配单词,然后在找不到解决方案时回滚。这个过程可能是这样的:“i”->“a”->“mad”->在“omain11”中找不到匹配的单词,正在回滚。“i”->“am”->“a”->“do”->“main”->“11”演示:大多数UNIX系统都有
/usr/share/dict/words
(一个每行一个单词的纯文本文件),可以用作字典。有一个Python模块()根据Peter Norvig在《美丽的数据》一书中的“自然语言语料库数据”一章中的代码实现分词