`
xiangxingchina
  • 浏览: 520221 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Lucene.net中文分词探究

阅读更多

一、 中文分词方式:

中文分词几种常用的方式:

A. 单字分词

单字分词,顾名思义,就是按照中文一个字一个字地进行分词。如:我们是中国人,效果:我 \ \ \ \ \ 人。

B. 二分法

二分法,就是按两个字进行切分。如:我们是中国人,效果:我们 \ 们是 \ 是中 \ 中国 \ 国人。

C. 词库分词

词库分词,就是按某种算法构造词然后去匹配已建好的词库集合,如果匹配到就切分出来成为词语。通常词库分词被认为是最理想的中文分词算法如:我们是中国人,通成效果为:我们 \ \ 中国 \ 中国人。

二、 Lucene.net 中五种中文分词效果探究

Lucene.net 中有很多种分词器,不同分词器使用了不同的分词算法,有不同的分词效果,满足不同的需求!在这里主要是看看其中五中分词器用来对中文切词的效果。五中分词器分别为: StandardTokenizer CJKTokenizerChinessTokenizerLowerCaseTokenizerWhitespaceTokenizer;

   下面就来测试一下它们切词的效果:

   测试目标:是否支持中文词语,英文单词,邮件,IP 地址,标点符号,数字,数学表达式的切割。
   测试文字:“我们是中国人; 我们 是 人;we are chiness; 172.16.34.172;youpeizun@126.com;#$*;85*34;58 <st1:chmetcnv tcsc="0" hasspace="False" sourcevalue="69" numbertype="1" negative="False" unitname="”" w:st="on">69 </st1:chmetcnv>

 

测试StandardTokenizer 的分词情况如下:

/ / / / / / / / / / we/ are/ chiness/ 172.16.34.172/ youpeizun@126.com/ 85/ 34/ 58/ 69/

测试CJKTokenizer 的分词情况如下:

我们/ 们是/ 是中/ 中国/ 国人/ 我们/ / / we/ chiness/ 172/ 16/ 34/ 172/ youpe

izun/ 126/ com/ #/ 85/ 34/ 58/ 69/

测试ChinessTokenizer 的分词情况如下:

/ / / / / / / / / / we/ are/ chiness/ 172/ 16/ 34/ 172/ youp

eizun/ 126/ com/ 85/ 34/ 58/ 69/

测试LowerCaseTokenizer 的分词情况如下:

我们是中国人/ 我们///we/are/chiness/youpeizun/com/

测试WhitespaceTokenizer 的分词情况如下:

我们是中国人;/ 我们//;we/are/chiness;/172.16.34.172;youpeizun@126.com;#$*;85*

34;58/69/

 

测试代码:
一、 中文分词方式:

中文分词效果测试代码
using  System;
using  System.Collections.Generic;
using  System.Text;
using  Lucene.Net.Analysis.Standard;
using  Lucene.Net.Analysis;
using  Lucene.Net.Index;
using  Lucene.Net.Documents;
using  System.IO;
using  Lucene.Net.Analysis.Cn;
using  Lucene.Net.Analysis.CJK;
// date:11-02-2007
// home page: http://www.cnblogs.com/xuanfeng
// author:peizunyou
namespace  TokenizerTest
{
    
class  TokenizerTest
    
{
        
static   void  Main( string [] args)
        
{
            
string  testText  =   " 我们是中国人; 我们 是 人;we are chiness; 172.16.34.172;youpeizun@126.com;#$*;85*34;58 69 " ;
            Console.WriteLine(
" 测试文字: " + testText);
            Console.WriteLine(
" 测试StandardTokenizer的分词情况如下: " );
            TestStandardTokenizer(testText);
            Console.WriteLine(
" 测试CJKTokenizer的分词情况如下: " );
            TestCJKTokenizer(testText);
            Console.WriteLine(
" 测试ChinessTokenizer的分词情况如下: " );
            TestChinessTokenizer(testText);
            Console.WriteLine(
" 测试LowerCaseTokenizer的分词情况如下: " );
            TestLowerCaseTokenizer(testText);
            Console.WriteLine(
" 测试WhitespaceTokenizer的分词情况如下: " );
            TestWhitespaceTokenizer(testText);
            Console.Read();
        }

        
static    void  TestStandardTokenizer( string  text)
        
{
            TextReader tr 
=   new  StringReader(text);

            StandardTokenizer st 
=   new  StandardTokenizer(tr);
         
            
while  (st.Next()  !=   null )
            
{

                Console.Write(st.token.ToString()
+ " " );
            }

            Console.WriteLine();
        }

        
static   void  TestCJKTokenizer( string  text)
        
{
            TextReader tr 
=   new  StringReader(text);
            
int  end  =   0 ;
            CJKAnalyzer cjkA 
=   new  CJKAnalyzer();
            TokenStream ts 
=  cjkA.TokenStream(tr);
            
while (end < text.Length)
            
{
                Lucene.Net.Analysis.Token t 
=  ts.Next();
                end 
=  t.EndOffset();
                Console.Write(t.TermText()
+ " " );
            }

            Console.WriteLine();
        }

        
static   void  TestChinessTokenizer( string  text)
        
{
            TextReader tr 
=   new  StringReader(text);
            ChineseTokenizer ct 
=   new  ChineseTokenizer(tr);
            
int  end  =   0 ;
            Lucene.Net.Analysis.Token t;
            
while (end < text.Length)
            
{
                t 
=  ct.Next();
                end 
=  t.EndOffset();
                Console.Write(t.TermText()
+ " " );
            }

            Console.WriteLine();
        
        }

        
        
static   void  TestLowerCaseTokenizer( string  text)
        
{
            TextReader tr 
=   new  StringReader(text);
            SimpleAnalyzer sA 
=   new  SimpleAnalyzer();
            
// SimpleAnalyzer使用了LowerCaseTokenizer分词器
            TokenStream ts  =  sA.TokenStream(tr);
            Lucene.Net.Analysis.Token t;
            
while ((t = ts.Next()) != null )
            
{
                Console.Write(t.TermText()
+ " / " );
            }

            Console.WriteLine();
        }

        
static   void  TestWhitespaceTokenizer( string  text)
        
{
            TextReader tr 
=   new  StringReader(text);
   
            WhitespaceAnalyzer sA 
=   new  WhitespaceAnalyzer();
            TokenStream ts 
=  sA.TokenStream(tr);
            Lucene.Net.Analysis.Token t;
            
while  ((t  =  ts.Next())  !=   null )
            
{
                Console.Write(t.TermText() 
+   " / " );
            }

            Console.WriteLine();
        }

    }

}

 

中文分词几种常用的方式:

A. 单字分词

单字分词,顾名思义,就是按照中文一个字一个字地进行分词。如:我们是中国人,效果:我 \ \ \ \ \ 人。

B. 二分法

二分法,就是按两个字进行切分。如:我们是中国人,效果:我们 \ 们是 \ 是中 \ 中国 \ 国人。

C. 词库分词

词库分词,就是按某种算法构造词然后去匹配已建好的词库集合,如果匹配到就切分出来成为词语。通常词库分词被认为是最理想的中文分词算法如:我们是中国人,通成效果为:我们 \ \ 中国 \ 中国人。

二、 Lucene.net 中五种中文分词效果探究

Lucene.net 中有很多种分词器,不同分词器使用了不同的分词算法,有不同的分词效果,满足不同的需求!在这里主要是看看其中五中分词器用来对中文切词的效果。五中分词器分别为: StandardTokenizer CJKTokenizerChinessTokenizerLowerCaseTokenizerWhitespaceTokenizer;

   下面就来测试一下它们切词的效果:

   测试目标:是否支持中文词语,英文单词,邮件,IP 地址,标点符号,数字,数学表达式的切割。
   测试文字:“我们是中国人; 我们 是 人;we are chiness; 172.16.34.172;youpeizun@126.com;#$*;85*34;58 <st1:chmetcnv tcsc="0" hasspace="False" sourcevalue="69" numbertype="1" negative="False" unitname="”" w:st="on">69 </st1:chmetcnv>

 

测试StandardTokenizer 的分词情况如下:

/ / / / / / / / / / we/ are/ chiness/ 172.16.34.172/ youpeizun@126.com/ 85/ 34/ 58/ 69/

测试CJKTokenizer 的分词情况如下:

我们/ 们是/ 是中/ 中国/ 国人/ 我们/ / / we/ chiness/ 172/ 16/ 34/ 172/ youpe

izun/ 126/ com/ #/ 85/ 34/ 58/ 69/

测试ChinessTokenizer 的分词情况如下:

/ / / / / / / / / / we/ are/ chiness/ 172/ 16/ 34/ 172/ youp

eizun/ 126/ com/ 85/ 34/ 58/ 69/

测试LowerCaseTokenizer 的分词情况如下:

我们是中国人/ 我们///we/are/chiness/youpeizun/com/

测试WhitespaceTokenizer 的分词情况如下:

我们是中国人;/ 我们//;we/are/chiness;/172.16.34.172;youpeizun@126.com;#$*;85*

34;58/69/

 

测试代码:
测试代代码下载

中文分词效果测试代码
using  System;
using  System.Collections.Generic;
using  System.Text;
using  Lucene.Net.Analysis.Standard;
using  Lucene.Net.Analysis;
using  Lucene.Net.Index;
using  Lucene.Net.Documents;
using  System.IO;
using  Lucene.Net.Analysis.Cn;
using  Lucene.Net.Analysis.CJK;
// date:11-02-2007
// home page: http://www.cnblogs.com/xuanfeng
// author:peizunyou
namespace  TokenizerTest
{
    
class  TokenizerTest
    
{
        
static   void  Main( string [] args)
        
{
            
string  testText  =   " 我们是中国人; 我们 是 人;we are chiness; 172.16.34.172;youpeizun@126.com;#$*;85*34;58 69 " ;
            Console.WriteLine(
" 测试文字: " + testText);
            Console.WriteLine(
" 测试StandardTokenizer的分词情况如下: " );
            TestStandardTokenizer(testText);
            Console.WriteLine(
" 测试CJKTokenizer的分词情况如下: " );
            TestCJKTokenizer(testText);
            Console.WriteLine(
" 测试ChinessTokenizer的分词情况如下: " );
            TestChinessTokenizer(testText);
            Console.WriteLine(
" 测试LowerCaseTokenizer的分词情况如下: " );
            TestLowerCaseTokenizer(testText);
            Console.WriteLine(
" 测试WhitespaceTokenizer的分词情况如下:
分享到:
评论

相关推荐

    lucene.NET 中文分词

    **Lucene.NET 中文分词技术详解** Lucene.NET 是一个高性能、全文检索库,它是Apache Lucene项目在.NET平台上的实现。作为一个开源的搜索引擎框架,Lucene.NET为开发者提供了强大的文本搜索功能。而在处理中文文档...

    Lucene.Net中文分词组件 Lucene.Net.Analysis.Cn

    Lucene.Net中文分词组件 Lucene.Net.Analysis.Cn

    猎兔Lucene.NET中文分词源码seg_src.rar

    《猎兔Lucene.NET中文分词源码seg_src.rar》是一个包含了Lucene.NET中文分词模块的源代码压缩包,其重要性和价值在于为开发者提供了深入理解与自定义中文分词算法的宝贵资源。Lucene.NET是Apache Lucene搜索引擎库的...

    lucene.net中文分词器

    《Lucene.NET中文分词器:深入解析与实践》 Lucene.NET是一个开源全文检索库,它是Apache Lucene项目在.NET平台上的实现。作为一个强大的信息检索工具,Lucene.NET广泛应用于搜索引擎开发、文档检索系统等领域。...

    lucene.net+盘古分词多条件全文检索并匹配度排序

    使用visual studio 开发的lucene.net和盘古分词实现全文检索。并按照lucene的得分算法进行多条件检索并按照得分算法计算匹配度排序。 可以输入一句话进行检索。 lucene.net的版本为2.9.2 盘古分词的版本为2.3.1 并...

    使用lucene.net盘古分词实现站内搜索demo

    在本文中,我们将深入探讨如何使用Lucene.NET和盘古分词来实现一个站内搜索功能的演示。Lucene.NET是Apache Lucene的.NET版本,它是一个高性能、全文本搜索库,提供了强大的索引和搜索功能。而盘古分词是针对中文...

    Lucene.Net +盘古分词 搜索引擎

    "盘古分词"是一个专门针对中文的分词工具,它可以将中文文本有效地切分成一个个独立的词语,为Lucene.Net提供精确的索引和查询基础。盘古分词以其高效、准确和丰富的词汇库,广泛应用于各种中文信息处理系统,包括...

    最新版Lucene.Net盘古分词2.0

    《最新版Lucene.Net盘古分词2.0——深度解析全文索引与中文分词技术》 在当今大数据时代,高效、精准的信息检索成为企业和个人获取信息的关键。其中,全文索引和中文分词技术是实现这一目标的重要工具。本文将围绕...

    Lucene.Net+盘古分词C# Demo

    Lucene.Net+盘古分词是一个常见的中文信息检索组合。但是随着盘古分词停止更新,与Lucene.Net3.0无法兼容。为了使得大家少走弯路,本人利用Lucene.Net2.9+盘古分词2.3搭建了一个Demo,里面包含了两个模块的源码,方便...

    完整的站内搜索引擎(Lucene.Net+盘古分词)

    分词(lucene.Net提供StandardAnalyzer一元分词,按照单个字进行分词,一个汉字一个词) 盘古分词 基于词库的分词,可以维护词库 首先我们新增的SearchHelper类需要将其做成一个单例,使用单例是因为:有许多地方需要...

    Lucene.net 盘古分词字典管理

    Lucene.NET 提供了一个接口,使得开发者可以自定义分词器,而盘古分词则作为一个插件,通过这个接口与Lucene.NET 结合,提供中文分词服务。这样,当我们创建索引时,盘古分词会负责将输入的中文文本切分成词,然后...

    lucene.net和盘古分词做站内搜索,热词搜索

    在构建高效的站内搜索系统时,`Lucene.Net` 和 `盘古分词` 是两个重要的工具,结合 `Quartz.Net` 定时任务框架,可以实现热词搜索功能。以下将详细介绍这些技术及其在实际应用中的作用。 **1. Lucene.Net** `Lucene...

    Lucene.net 盘古分词C#

    【标题】"Lucene.net 盘古分词C#" 涉及到的是在.NET环境中使用Lucene库进行全文检索,并结合盘古分词工具进行中文分词处理。Lucene是一个开源的全文检索库,提供了高效的索引和搜索功能。在.NET平台上,Lucene.net是...

    Lucene.net学习帮助文档

    Lucene.net默认支持英文文本处理,但针对中文,你需要配置合适的分词器,如IK Analyzer、HanLP或jieba.NET等。这些分词器能够正确处理中文的词语边界,确保搜索结果的准确性。 **四、构建搜索引擎** 使用Lucene...

    Lucene.Net+盘古分词Demo

    Lucene.Net+盘古分词是一个常见的中文信息检索组合。但是随着盘古分词停止更新,与Lucene.Net3.0无法兼容。为了使得大家少走弯路,本人利用Lucene.Net2.9+盘古分词2.3搭建了一个Demo,里面包含了两个模块的源码,方便...

    Lucene.Net

    2. **分词和分析**:Lucene.Net包含多种分词器和分析器,可以根据语言特性对文本进行预处理,例如分词、去除停用词、词形还原等。 3. **查询解析**:支持丰富的查询语法,包括布尔查询、短语查询、模糊查询、范围...

    lucene.net +盘古分词器 实例

    Lucene.Net只是一个全文检索开发包,不是一个成型的搜索引擎 它提供了类似SQLServer数据库正式版中的全文检索功能的... 但是Lucene.Net内置分词算法对中文支持不是很好,以下会使用国内较为流行的分词算法 -- 盘古分词

    自己刚开发完成完美运行Lucene.net+SQL server(附数据源)童叟无欺

    3.使用了较新的Lucene.net,目前是3.0版本 4.使用了最后一版盘古分词(2016年版本) 5.使用Winform+webBrowser实现(webBrowser负责显示结果) 使用方式: 1.新建数据库,然后在新建的数据库中执行附件根目录的sql...

    Lucene.net的四个版本(更新至2018.1.26 )

    基于Lucene.net的四个版本(更新至2018.1.26 ) ------------------------------- Lucene.Net.2.9.2.2-支持.net2.0和4.0; Lucene.Net.2.9.4.1 仅支持.net4.0; Lucene.Net.3.0.3 z支持3.5和4.0; Lucene.Net.4.8.0-...

    Lucene.Net的DLL

    Lucene.Net.Analysis.China.dll可能包含了诸如IK Analyzer、HanLP、jieba.NET等针对中文的分词库,以便更好地支持中文搜索。 2. **Lucene.Net.dll**:这是Lucene.Net的核心库文件,包含了所有基本的搜索和索引功能。...

Global site tag (gtag.js) - Google Analytics