论坛首页 Java版

一段没有空格的英文怎么分词?

浏览 6016 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-01-28 关键字: 分词 lucene
最近碰到一个需求需要来分析一些网站的域名来猜测网站可能的相关信息。大家知道,域名可能是一个或几个单词连成的,中间没有任何字符将他们间隔开。我的问题是这样如何分词呢?简单的说,javaeye如何分解成java和eye呢?

就我看来,只能通过不停的试分词,将得到的单词交于字典来判断是否合法单词。可以是由左至右,由长至短来判断。如果整个字符串被分解后都是合法单词,那很可能就是最合理的分法,如果不是,则取最长的合法单词。

欢迎大家来讨论。

另:大家知道有啥好的英文字典吗?lucene自带字典吗?
   
最后更新时间:2007-01-29
有点意思。第一次听到这样的需求。
   
0 请登录后投票
最后更新时间:2007-01-28
icetortoise 写道
最近碰到一个需求需要来分析一些网站的域名来猜测网站可能的相关信息。大家知道,域名可能是一个或几个单词连成的,中间没有任何字符将他们间隔开。我的问题是这样如何分词呢?简单的说,javaeye如何分解成java和eye呢?

就我看来,只能通过不停的试分词,将得到的单词交于字典来判断是否合法单词。可以是由左至右,由长至短来判断。如果整个字符串被分解后都是合法单词,那很可能就是最合理的分法,如果不是,则取最长的合法单词。

欢迎大家来讨论。

另:大家知道有啥好的英文字典吗?lucene自带字典吗?


最简单的做法....DFA/PDA判定...把字典做成一个限定自动机/下推自动机,然后用输入的字符去做最大匹配。如果是DFA,效率应该是线性的,仅仅和目标长度有关。具体实现可以参考dragon book,里面对自动机已经讲得很明白了。应该可以用600行左右的java代码搞定。
   
0 请登录后投票
最后更新时间:2007-01-28
可以考虑先用元音复音结合,来减少组合的可能性。
   
0 请登录后投票
最后更新时间:2007-01-29
我觉得这种情况就不应该分词。既然人家把javaeye写在一起了,那么他就是一个特殊的意思。
当然你觉得可以从名字里读出相关语义,比如javaeye是跟java相关的,那么是有点意义的,但是要注意,比如像JBuilder这样的名字,你如何确定跟Java有关?或者象Jacom你如何知道是java com的组合?

另一方面,任何组合拆分一个单词,比中文难多了。

所以我认为这种想法可行性是很低的,不值得做。
   
0 请登录后投票
最后更新时间:2007-01-29
自己做常用字分词吧,可哪些是常用字呢。google应该也很难做,虽然人家有大量的查询关键字可以做分析。再有就是算法效率,常规分词算法效率时间复杂度应该是在n!级别吧。
   
0 请登录后投票
最后更新时间:2007-01-29
-->词典
j -->词典
ja -->词典
jav -->词典
java -->词典 OK
e  -->词典
ey -->词典
eye -->词典 OK
   
0 请登录后投票
最后更新时间:2007-01-29
Lucas Lee 写道


所以我认为这种想法可行性是很低的,不值得做。


的确是这样,不过我认为在我们特殊的需求下,还是有意义的。退一步讲,我们做了就会有钱拿,不好吗?

我还是想问问大家知道有什么比较好的英文字典吗?
   
0 请登录后投票
最后更新时间:2007-01-29
我倒,为何帖子列表中显示的最后更新还是“Godlikeme”...bug啊bug
   
0 请登录后投票
最后更新时间:2007-01-29
icetortoise 写道
Lucas Lee 写道


所以我认为这种想法可行性是很低的,不值得做。


的确是这样,不过我认为在我们特殊的需求下,还是有意义的。退一步讲,我们做了就会有钱拿,不好吗?

我还是想问问大家知道有什么比较好的英文字典吗?

hack一下金山吧,呵呵,或者跟人家谈谈。
   
0 请登录后投票
论坛首页 Java版

跳转论坛:
JavaEye推荐