不要急,总有办法的

关于ansj分词词性的问题

Elasticsearch | 作者 liubin | 发布于2019年04月01日 | 阅读数:1899

采用的用户的自定义分词,每个分词走自己的自定义词典。
在首次加载和二次加载  分词器给出的词性不一致。  对于英文字符会出现这样的错误。
 
分词文本

11123.png

 
 
第一次分词结果
 
{
    "tokens": [
        {
            "token": "xx",
            "start_offset": 0,
            "end_offset": 2,
            "type": "en",
            "position": 0
        },
        {
            "token": ",",
            "start_offset": 2,
            "end_offset": 3,
            "type": "w",
            "position": 1
        },
        {
            "token": "dasdasdasd",
            "start_offset": 3,
            "end_offset": 13,
            "type": "en",
            "position": 2
        },
        {
            "token": ",",
            "start_offset": 13,
            "end_offset": 14,
            "type": "w",
            "position": 3
        },
        {
            "token": "小米",
            "start_offset": 14,
            "end_offset": 16,
            "type": "userDefine",
            "position": 4
        },
        {
            "token": ",",
            "start_offset": 16,
            "end_offset": 17,
            "type": "w",
            "position": 5
        },
        {
            "token": "ofo",
            "start_offset": 17,
            "end_offset": 20,
            "type": "userDefine",
            "position": 6
        },
        {
            "token": ",",
            "start_offset": 20,
            "end_offset": 21,
            "type": "w",
            "position": 7
        },
        {
            "token": "企查ofj",
            "start_offset": 21,
            "end_offset": 26,
            "type": "userDefine",
            "position": 8
        }
    ]
}
 
第二次分词结果
{
    "tokens": [
        {
            "token": "xx",
            "start_offset": 0,
            "end_offset": 2,
            "type": "userDefine",
            "position": 0
        },
        {
            "token": ",",
            "start_offset": 2,
            "end_offset": 3,
            "type": "w",
            "position": 1
        },
        {
            "token": "dasdasdasd",
            "start_offset": 3,
            "end_offset": 13,
            "type": "userDefine",
            "position": 2
        },
        {
            "token": ",",
            "start_offset": 13,
            "end_offset": 14,
            "type": "w",
            "position": 3
        },
        {
            "token": "小米",
            "start_offset": 14,
            "end_offset": 16,
            "type": "userDefine",
            "position": 4
        },
        {
            "token": ",",
            "start_offset": 16,
            "end_offset": 17,
            "type": "w",
            "position": 5
        },
        {
            "token": "ofo",
            "start_offset": 17,
            "end_offset": 20,
            "type": "userDefine",
            "position": 6
        },
        {
            "token": ",",
            "start_offset": 20,
            "end_offset": 21,
            "type": "w",
            "position": 7
        },
        {
            "token": "企查ofj",
            "start_offset": 21,
            "end_offset": 26,
            "type": "userDefine",
            "position": 8
        }
    ]
}
 
直接将英文的词性en 改变为了用户自定义了。 默认词典没有指定词性和词频,不知道ansj 分词针对这种情况是否做了特殊处理,有没有什么懒加载模式,直接改变了原有的词性。
 

222.png

 
 
 
 
已邀请:

rochy - rochy_he

赞同来自:

userDefine 是 ansj 自身做了处理
 
请参考下面两处的源码:
https://github.com/NLPchina/an ... 23L27
 
https://github.com/NLPchina/an ... 23L87

PythonLee - 90后IT男

赞同来自:

你们自己是不是修改过源码?只有添加到词典标明了是userdefine或者没有标注的词性才是这个!怀疑是你们自己修改了源码,分词之后把词写入字典或调用api!

要回复问题请先登录注册