趁着清明放假的大好岁月,花了点洗衣服的时间看了点lucene的源码,主要想看看分词那部分。
luncene分词的大概过程是这样的:
1 截断单词
2 过滤干扰信息
3 写入结果
截断,对于英文来书很简单就是用空格和标点符号以及一些特殊用词,这些在系统里已经定义好,当然你也可以适时地改变一下。
过滤,在它的标准算法中会对如下的符号进行过滤:'s 'S . 这样几种。
写入,这个顾名思义啦
下面谈谈我对中文分词的猜想,之前也用过je分词这样所谓成功作品,但无论性能还是效果都无法达到我的要求,而且它又不公开源码,令人非常失望,所以目前我使用的依然是luncene中的标准分词,也就是单字分词,但单字分词的问题也很明显消耗了极大的存储空间,目前在非压缩状态下,索引是原始文档的1.2~1.3倍之多,这是随着数据积累挺令我担心的问题。所以不得不思考中文的算法过程,我设想的算法应该是这样:
1 截断,利用分词库和常用介词表进行,其中分词库采用首字单词长度逆向排序法匹配,过程:
首先将词库按首字放入hash,然后将同首字的按照长度逆序排列
然后分词的时候先按单字分开,然后依据分词表,匹配 n次 (n是首字列表里的元素个数)并且允许重复匹配,比如中国 中国人 需要重复匹配。
之后同样去除标点符号等干扰因素。
那么我们现在来是想一下它的算法复杂度:
应该是: len(str)×n(str【i】)
试验更高级的算法在多词匹配时利用递归,将后一个字的算法也同时写入,或将减少其算法复杂度。
下周刊有时间的时候尝试写一个分词来看看,是否合理。
Tags -
分词 ,
算法
分享到:
相关推荐
微信小程序支付JSAPI交易类型 已通过测试 返回例子如下: <xml><return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> <result_code><![CDATA[SUCCESS]]></result_code>
[CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></...
[CDATA[<p>Communication Systems of all types</p>]]></details> <testsuite name="Hand-held devices"> <details><![CDATA[]]></details> <testcase name="10G shock"> <summary><![CDATA[]]></summary> ...
[CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag> </xml...
ATTLIST 电话 类别 CDATA "移动电话"> ]> <联系人列表> <说明>&content;</说明> <联系人> <姓名>刘保文</姓名> <ID>201003101115</ID> <公司>腾飞汇通有限公司</公司> <电话 类别="移动电话">18993380967</...
[CDATA[ ]]> 用于包含 Mybatis 的标签(如 `<if>`、`<where>`、`<choose>` 等),否则这些标签将不会被解析。 实例如下:<select id="allUserInfo" parameterType="java.util.HashMap" resultMap="userInfo1"> <!...
"<Description>为企业提供专业的、全面的、量身定制的企业业管理咨询、员工培训、企业品牌营销策划、竞争性行业分析、IT信息咨询、酒店以及职工餐饮托管等服务。" &_ "</Description>" &_ "<PicUrl><![CDATA...
<preconditions><![CDATA[1.使用udp_bi用户在PLSQL正常登陆UAT数据库<br> (UAT数据库IP: 10.0.13.178)<br> 2.数据库脚本已下载至本地环境]]></preconditions><importance><![CDATA[2]]></importance><steps> <step>
[CDATA[ 文本内容 ]]>`,其中"文本内容"部分不能包含字符串"]]>",以防止提前结束CDATA段。同时,CDATA段不能嵌套,也就是说,一个CDATA段内部不能再有另一个CDATA段。 要将Java对象转换成XML并包含CDATA,我们可以...
自己将数据导入到xml中的,希望有需要的朋友可以自己下载,格式为<!DOCTYPE PCAroot[ <!ELEMENT PCAroot (Province*)> <!ELEMENT Province (City*)> <!ELEMENT City (Area*)> <!ELEMENT Area (#PCDATA)> <!...
[CDATA[FAIL]]></return> <return><![CDATA[商户号mch_id与appid不匹配]]></return> </xml> 原因是我拿到的商户号不是这个公众号的。一定要检查是不是这个公众号的商户号。 免责声明:本站所有文章和...
ATTLIST course course_id ID #REQUIRED title CDATA #REQUIRED dept_name IDREF #REQUIRED credits CDATA #REQUIRED> <!ELEMENT instructor EMPTY> <!ATTLIST instructor IID ID #REQUIRED name CDATA #REQUIRED ...
ENTITY % idType "ID CDATA #IMPLIED"> <!NOTATION ID NOTATION URI 'http://example.com/unique-id'> ]> <UserGroupSystem> <Group id="group1" ParentGroup="root"> <GroupName>管理员组</GroupName> ...
**示例**:定义一个`<note>`元素,其包含`<to>`、`<from>`、`<heading>`和`<body>`四个子元素,其中`<to>`、`<from>`和`<heading>`元素仅包含文本数据,而`<body>`元素可以包含文本和子元素。 ```xml <!ELEMENT note...
[CDATA[留言内容]]></content> </message> </messages> </gbook> ``` 4. **DTD定义**: - 用于定义XML文档的结构和约束条件。 - 例如,`<gbook>` 元素包含了 `<info>` 和 `<messages>` 两个子元素。 ```xml...
<价格 货币类型="日元" 货币单位="元">12000</价格> <图片 source="LOVE YOU.gif"/> </笔记本电脑> </产品目录> ``` 2. 针对 XML 文件编写 CSS 在这个练习题中,我们需要编写 CSS 使得三个“Student”标记中的...
[CDATA[image1-1.jpg]]></image> <image name="garden-1"><![CDATA[image2-1.jpg]]></image> <image name="shop-1"><![CDATA[image3-1.jpg]]></image> </images> <images> <image name="school-2"><![CDATA...
</body> </note> ``` 在这个例子中,`<!DOCTYPE note [...]>`定义了文档类型为`note`,并且规定了`note`元素包含`to`、`from`、`heading`和`body`这四个子元素,每个子元素都允许包含字符数据(#PCDATA)。 外部...
[CDATA[http://t{$serverpart}.tianditu.cn/DataServer?T=cia_w&X={$x}&Y={$y}&L={$z}]]></url> <serverParts>0 1 2 3 5 6 7</serverParts> <backgroundColor>#00000000</backgroundColor> </customMapSource> </...
<first_name>Alan</first_name> <last_name>Turing</last_name> </name> <profession>computer scientist</profession> <profession>mathematician</profession> <profession>cryptographer</profession> </...