geraldsec / jcseg

Automatically exported from code.google.com/p/jcseg
0 stars 0 forks source link

求救!分词出现错误! (已解决) #2

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
你好:
我使用的是最新的1.7.2.5版本;
我把以下一句话:阿尔滨·锦城明郡【盘锦豪宅】新品【四层
】墅质洋房一跃二庭院全送,三跃四超大露台。70㎡车库全赠
送,电梯直接入户,高档石材外立面3857777
进行分词处理,能正确进行分词;
但我把这句话去掉标点符号后,语句如下:
阿尔滨锦城明郡盘锦豪宅新品四层墅质洋房一跃二庭院全送��
�跃四超大露台70车库全赠送电梯直接入户高档石材外立面38577
77
再进行分词,出现了空指针的现象:
Exception in thread "main" java.lang.NullPointerException
    at com.webssky.jcseg.ASegment.findCHName(ASegment.java:535)
    at com.webssky.jcseg.ASegment.next(ASegment.java:215)
    at com.webssky.jcseg.test.Demo.segment(Demo.java:52)
    at com.webssky.jcseg.test.Demo.main(Demo.java:88)
通过断点跟踪,发现是在解析“高档”这个词时出现的问题��
�我发现在lex-chars.lex文件中并没有“档”这个字,请问如果我
自己添加这个字到文件中的话,档/null/dang/null/XXX,这5个字段
都代表什么意思?最后这个整数XXX需要如何填写,多谢!

Original issue reported on code.google.com by long_f...@sohu.com on 24 Dec 2012 at 7:48

GoogleCodeExporter commented 8 years ago
很抱歉这么晚才给你回复。lex-char.lex这个词库中的词条含义��
�例如:
诚/null/cheng/null/28547
词条/词性/拼音/同义词/语素自由度

语素自由度,表示一个字单独成词的概率。例如,“的”单��
�成词的情况很多,有如,“侺”很少单独出现,通常都是和�
��的词以词组的形式出现。

这里感谢你提醒,我还确实没有察觉到lex-char.lex中居然没有��
�档”这个词。这个词的语素自由度大概为:25542 
(通常档,很少单独出现,一般的词:高档,档次,这些值是�
��据语料库统计的结果)。

Original comment by chenxin6...@gmail.com on 25 Dec 2012 at 9:24

GoogleCodeExporter commented 8 years ago
加入“档”字后就可以了。
切分结果:(后面去除标点的文本)
阿/ 尔/ 滨/ 锦/ 城/ 明/ 郡/ 盘锦/ 豪宅/ 新品/ 四层/ 墅质/ 
洋房/ 一跃/ 二/ 庭院/ 全/ 送/ 三/ 跃/ 四/ 超大/ 很大/ 露台/ 
70/ 车库/ 全/ 赠送/ 电梯/ 直接/ 入户/ 高档/ 石材/ 外立面/ 
3857777

Original comment by chenxin6...@gmail.com on 25 Dec 2012 at 9:45

GoogleCodeExporter commented 8 years ago
如果你需要达到(楼盘信息领域)更好的切分效果,你可能��
�要优化词库。

上面的“跃”我不知道是不是单位,如果你想识别”数字跃��
�,例如:三跃,五跃,你可以吧”跃“这个字当做单位放入l
ex-unit.lex中。

要识别”阿尔滨锦城明郡“,可以再lex-main.lex中加入”阿尔��
�“和”锦城明郡“这两个词。并且可以吧”阿尔宾,啊尔宾�
��。。。“这些同音词作为”阿尔滨“这个词的同义词,这样
即使输入”阿尔宾“也可以达到同样的搜索效果。

Original comment by chenxin6...@gmail.com on 25 Dec 2012 at 9:54

GoogleCodeExporter commented 8 years ago
词库一直在更新,我刚才吧新的词库上传上去了。新词库切��
�结果(去除标点的文本):

阿尔滨/ 阿尔宾/ 阿尔斌/ 锦城/ 明郡/ 盘锦/ 豪宅/ 新品/ 
四层/ 墅质/ 洋房/ 一跃/ 二/ 庭院/ 全/ 送/ 三/ 跃/ 四/ 超大/ 
很大/ 露台/ 70/ 车库/ 全/ 赠送/ 电梯/ 直接/ 入户/ 高档/ 
石材/ 外立面/ 3857777

哥们去下载最新此刻吧。

Original comment by chenxin6...@gmail.com on 25 Dec 2012 at 10:18

GoogleCodeExporter commented 8 years ago
哥们太给力啦!
词库已经更新了,可以正常分词了,谢一个先!
关于语素自由度值的的问题,我还是想多请教下,这个值是��
�们自己通过语料库统计出来的还是网上查找出来的?
我在http://technology.chtsai.org/charfreq/下载了characters.zip和sorted.zip
,貌似和你给的
“档”字的语素自由度值不同?(那个值只有10953,和你提供
的25542)

Original comment by long_f...@sohu.com on 27 Dec 2012 at 10:24

GoogleCodeExporter commented 8 years ago
根据人民日报的语料库统计出来了。  
这个也只是统计值,谈不上精确。 
有时候还需要统计大量的分词结果来更改这个值。这个值是��
�料库统计 + 分词结果优化统计的结果。

Original comment by chenxin6...@gmail.com on 27 Dec 2012 at 4:27

GoogleCodeExporter commented 8 years ago
你好:
 你之前说的可以吧”阿尔宾,啊尔宾,。。。“这些同音词作为”阿尔滨“这个词的同义词,是如何设置的?是直接在lex-main.lex中添加”阿尔宾,啊尔宾,。。。“这些同音词吗?还是别的方式?
 另有个问题不知道有没有解决方法:就是简体、繁体词的辨认问题,比如“现在”这个词在lex-main.lex中已经添加,在进行分词时可以归为一个词解析出来,但如果为“現在”这个词,在进行分词时会被划分为“現“和”在“2个词

Original comment by long_f...@sohu.com on 7 Jan 2013 at 9:50

GoogleCodeExporter commented 8 years ago
CJK词库词条结构:

词条/词性集合/拼音/同义词集合

词性集合和同义词词库多个使用英文状态下的逗号隔开。

例如:阿尔滨

阿尔滨/n/a er bin/阿尔宾,啊尔宾

你只要把同义词放在对应的位置就可以了。不是在词库中直��
�加入“阿尔宾,啊尔宾”这些词条,是放在“阿尔滨”这个�
��有的词条的同义词位置(词条的第三个"/"后面)。

Wiki里面有个专门介绍这个的文章:http://code.google.com/p/jcseg/wik
i/JcsegLexicon

Original comment by chenxin6...@gmail.com on 8 Jan 2013 at 3:56

GoogleCodeExporter commented 8 years ago
如果你想识别繁体,jcseg可以很方便的解决这个问题。

你只要在词库中加入繁体词条就可以了,例如你想识别“現��
�”

在lex-main.lex中加入如下内容作为一行:

現在/null/xian zai/现在

后面那个“现在”是繁体“現在”的同义词。

你也可以在简体词条“现在”加入繁体同义词“繁体”,如��
�:

现在/null/xian zai/現在

这样无论是输入“现在”还是“現在”都可以达到同样的搜��
�效果(如果你是吧jcseg用于信息检索)。

Original comment by chenxin6...@gmail.com on 8 Jan 2013 at 4:02

GoogleCodeExporter commented 8 years ago
你好:
按照您的思路,在lex-main.lex中加入如下内容作为一行:现在/n
ull/xian zai/現在;
如果我有如下一句话需要进行分词处理:"現在你回家吗?",��
�词后为“現|在|你|回家|吗|”,
而我想要得到的分词为“現在|你|回家|吗|”,如果这样的话�
��就必须在lex-main.lex中添加一个:“現在/null/xian 
zai/null”的词?
另一个问题是关于词性集合的,我看词库中,有定义为n、nt��
�nz、ns、t等等,都代码什么含义,能具体介绍介绍吗?

Original comment by long_f...@sohu.com on 10 Jan 2013 at 2:38

GoogleCodeExporter commented 8 years ago
想把 “現在你回家吗?” 

且分为:現在|你|回家|吗|  
说明“現在”必须是词库中的一个词,你的词库中有“現在��
�这个词吗?

没有就的加上在lex-main.lex中加入如下作为一行:

現在/null/xian zai/null

词性集合如果你不知道可以使用null代替,同义词集合如果没�
��或者不填也使用null代替。

加上这行后,重启jcseg就意味着词库中有”現在“这个词了。
那么”現在你回家吗?“就可以被且分为:

現在/ 你/ 回家/ 吗

Original comment by chenxin6...@gmail.com on 10 Jan 2013 at 5:13

GoogleCodeExporter commented 8 years ago
而且,词库已经有”现在“这个词了。

所以:

现在/null/xian zai/現在

(是”现在“是词库词条,在这里繁体的”現在“表示简体”�
��在“的同义词)

就不用再加了。

Original comment by chenxin6...@gmail.com on 10 Jan 2013 at 5:19

GoogleCodeExporter commented 8 years ago
至于词性的含义:

词性标注除了使用《现代汉语语法信息词典》中的26个词类标
记(名词n、时间词t、处所词s、方位词f、数词m、量词q、区��
�词b、代词r、动词v、形容词a、状态词z、副词d、介词p、连词
c、助词u、语气词y、叹词e、拟声词o、成语i、习用语l、简称j
、前接成分h、后接成分k、语素g、非语素字x、标点符号w)外
,增加了以下3类标记:①专有名词的分类标记,即人名nr,��
�名ns,团体机关单位名称nt,其他专有名词nz;②语素的子类�
��记,即名语素Ng,动语素Vg,形容语素Ag,时语素Tg,副语素D
g等;③动词和形容词的子类标记,即名动词vn(具有名词特��
�的动词),名形词an(具有名词特性的形容词),副动词vd(
具有副词特性的动词),副形词ad(具有副词特性的形容词)
。合计约40个左右。

Original comment by chenxin6...@gmail.com on 10 Jan 2013 at 5:19

GoogleCodeExporter commented 8 years ago
我在jcseg中引入词性集合是为了给分词结果加上词性标注,主
要是为了去除”中文姓名识别“歧义,以及方便后面对”未��
�录词“的识别,目前jsceg还没有实现这些,所以词性集合使��
�null代替就可以了。

Original comment by chenxin6...@gmail.com on 10 Jan 2013 at 5:22

GoogleCodeExporter commented 8 years ago
还有个问题,在1.7.0版本后,由于添加了中文数字和中文分数��
�别,例如:"一百五十个人都来了,四十分之一的人。"中的"�
��百五十"和"四十分之一"。并且jcseg会自动将其转换为阿拉伯�
��字加入到分词结果中。如:150, 1/40。
这个处理在外部有开关控制吗?如果不想让其自动识别,需��
�在哪几个文件进行修改,多谢。

Original comment by long_f...@sohu.com on 14 Jan 2013 at 6:22

GoogleCodeExporter commented 8 years ago
主要是我想进行一个忠于原文的分词处理,如果加上这个自��
�识别的处理后,可能会导致之后对分词频率产生影响。

Original comment by long_f...@sohu.com on 14 Jan 2013 at 6:25

GoogleCodeExporter commented 8 years ago
这个没有加上配置项。

把com.webssky.jcseg.ASegment源文件中133-199行的代码注释,重新编��
�下就可以了。

Original comment by chenxin6...@gmail.com on 16 Jan 2013 at 5:43

GoogleCodeExporter commented 8 years ago
按照你说的修改测试了下,OK。
不过,我感觉只要把L194行的if (wd != null) 
wordPoll.add(wd);这句删掉就可以了,不然如果某个词为“六千元
”,会被分成“六千|元”的,而不是“六千元”。
多谢!

Original comment by long_f...@sohu.com on 18 Jan 2013 at 3:30

GoogleCodeExporter commented 8 years ago
恩,也可以。为了性能,最好全部注释掉。。。

Original comment by chenxin6...@gmail.com on 19 Jan 2013 at 6:01

GoogleCodeExporter commented 8 years ago

Original comment by chenxin6...@gmail.com on 10 May 2013 at 5:11