【发布时间】:2011-09-09 16:53:14
【问题描述】:
假设我有一本包含几百万个单词和短语的字典。对于每个输入句子,我想识别(完全匹配)字典包含的所有单词/短语。应该首选最长的字典名称,并且没有重叠。 例如:
Sentence: "Los Angeles Lakers visited Washington State last week"
Dictionary: {Los Angeles, Lakers, Los Angeles Lakers, Washington, State, Washington State University}
Then the sentence would be tagged as follows:
[Los Angeles Lakers] visited [Washington] [State] last week.
我能想到的一个解决方案是将字典以恒定的查找时间(例如,基于散列的集合)存储在内存中,然后从每个句子中提取所有单词 n-gram(n 可以设置为字典中最长的短语)将每个短语与字典进行比较并保留最长的不重叠的短语。有更好的解决方案吗? (因为 n-gram 的生成可能很慢)。也许树木可以提供帮助?
谢谢!
【问题讨论】:
-
所以你决定选择洛杉矶湖人队而不是洛杉矶队,因为时间更长。但是是什么让某些东西变得更长——字母或单词?考虑“蓝天太棒了”,你有 4 个词和 15 个字符的“蓝天是”,或者只有 3 个词但 19 个字符的“天空太棒了”。哪个会赢?
-
如果单词数量相等,那么您将使用什么标准。字符更长?标记中最长的单词(例如,“A Rocket”会胜过“This guy”)?
-
如果是平局,我不在乎谁会赢。甚至是随机作品。