盘古分词,记灵一下

http://pangusegment.codeplex.com

PanGu.dll 调用方法

初始化

在进程启动时,我们需要对盘古分词进行初始化,初始化的调用代码如下:

默认方式初始化

PanGu.Segment.Init(); 

 

这个调用将使用和 PanGu.dll 同路径下的 pangu.xml 配置文件 

 

指定配置文件方式初始化

 

PanGu.Segment.Init(filename); 

filename 为pangu.xml 的完整路径名,如“c:\pangu.xml”

在某些应用中,pangu.xml 不一定在pangu.dll相同的路径下,或者无法获取pangu.dll的当前路径,这时需要通过这种方式调用来让调用者指定盘古分词所用的配置文件的绝对路径。

 

分词

 

Segment segment = new Segment();
ICollection<WordInfo> words = segment.DoSegment(text);

 

ICollection<WordInfo> words = segment.DoSegment(text, options);

ICollection<WordInfo> words = segment.DoSegment(text, options, parameters);

 

其中
· text 为需要分词的文本
· options 为自定义分词选项,默认为pangu.xml 中指定的分词选项
· parameters 为分词参数,默认为pangu.xml 中指定的分词参数

分词选项定义:

 

public class MatchOptions
{
/// <summary>
/// 中文人名识别
/// </summary>
public bool ChineseNameIdentify = false;
/// <summary>
/// 词频优先
/// </summary>
public bool FrequencyFirst = false;
/// <summary>
/// 多元分词
/// </summary>
public bool MultiDimensionality = true;
/// <summary>
/// 英文多元分词,这个开关,会将英文中的字母和数字分开。
/// </summary>
public bool EnglishMultiDimensionality = false;
/// <summary>
/// 过滤停用词
/// </summary>
public bool FilterStopWords = true;
/// <summary>
/// 忽略空格、回车、Tab
/// </summary>
public bool IgnoreSpace = true;
/// <summary>
/// 强制一元分词
/// </summary>
public bool ForceSingleWord = false;
/// <summary>
/// 繁体中文开关
/// </summary>
public bool TraditionalChineseEnabled = false;
/// <summary>
/// 同时输出简体和繁体
/// </summary>
public bool OutputSimplifiedTraditional = false;
/// <summary>
/// 未登录词识别
/// </summary>
public bool UnknownWordIdentify = true;
/// <summary>
/// 过滤英文,这个选项只有在过滤停用词选项生效时才有效
/// </summary>
public bool FilterEnglish = false;
/// <summary>
/// 过滤数字,这个选项只有在过滤停用词选项生效时才有效
/// </summary>
public bool FilterNumeric = false;
/// <summary>
/// 忽略英文大小写
/// </summary>
public bool IgnoreCapital = false;
/// <summary>
/// 英文分词
/// </summary>
public bool EnglishSegment = false;
/// <summary>
/// 同义词输出
/// </summary>
/// <remarks>
/// 同义词输出功能一般用于对搜索字符串的分词,不建议在索引时使用
/// </remarks>
public bool SynonymOutput = false;
/// <summary>
/// 通配符匹配输出
/// </summary>
/// <remarks>
/// 同义词输出功能一般用于对搜索字符串的分词,不建议在索引时使用
/// </remarks>
public bool WildcardOutput = false;
/// <summary>
/// 对通配符匹配的结果分词
/// </summary>
public bool WildcardSegment = false;
/// <summary>
/// 是否进行用户自定义规则匹配
/// </summary>
public bool CustomRule = false;
}

 

 

分词参数定义

[Serializable]
public class MatchParameter
{
/// <summary>
/// 多元分词冗余度
/// </summary>
public int Redundancy = 0;
/// <summary>
/// 未登录词权值
/// </summary>
public int UnknowRank = 1;
/// <summary>
/// 最匹配词权值
/// </summary>
public int BestRank = 5;
/// <summary>
/// 次匹配词权值
/// </summary>
public int SecRank = 3;
/// <summary>
/// 再次匹配词权值
/// </summary>
public int ThirdRank = 2;
/// <summary>
/// 强行输出的单字的权值
/// </summary>
public int SingleRank = 1;
/// <summary>
/// 数字的权值
/// </summary>
public int NumericRank = 1;
/// <summary>
/// 英文词汇权值
/// </summary>
public int EnglishRank = 5;
/// <summary>
/// 符号的权值
/// </summary>
public int SymbolRank = 1;
/// <summary>
/// 强制同时输出简繁汉字时,非原来文本的汉字输出权值。
/// 比如原来文本是简体,这里就是输出的繁体字的权值,反之亦然。
/// </summary>
public int SimplifiedTraditionalRank = 1;
/// <summary>
/// 同义词权值
/// </summary>
public int SynonymRank = 1;
/// <summary>
/// 通配符匹配结果的权值
/// </summary>
public int WildcardRank = 1;
/// <summary>
/// 过滤英文选项生效时,过滤大于这个长度的英文。
/// </summary>
public int FilterEnglishLength = 0;
/// <summary>
/// 过滤数字选项生效时,过滤大于这个长度的数字。
/// </summary>
public int FilterNumericLength = 0;
/// <summary>
/// 用户自定义规则的配件文件名
/// </summary>
public string CustomRuleAssemblyFileName = "";
/// <summary>
/// 用户自定义规则的类的完整名,即带名字空间的名称
/// </summary>
public string CustomRuleFullClassName = "";
}
 

 

返回为WordInfo 的集合

 

 

public class WordInfo : WordAttribute, IComparable<WordInfo>
{
/// <summary>
/// 当前单词类型
/// </summary>
public WordType WordType;
/// <summary>
/// 原始的单词类型
/// </summary>
public WordType OriginalWordType;
/// <summary>
/// 单词在text 中的起始位置
/// </summary>
public int Position;
/// <summary>
/// Rank for this word
/// 单词权重
/// </summary>
public int Rank;
/// <summary>
/// 单词
/// </summary>
public String Word;
/// <summary>
/// 词性
/// </summary>
public POS Pos;
/// <summary>
/// 词频
/// </summary>
public double Frequency;
}
 

 

配置文件PanGu.xml

 

<?xml version="1.0" encoding="utf-8"?>
<PanGuSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.codeplex.com/pangusegment">
<DictionaryPath>..\Dictionaries</DictionaryPath>
<MatchOptions>
<ChineseNameIdentify>true</ChineseNameIdentify>
<FrequencyFirst>false</FrequencyFirst>
<MultiDimensionality>false</MultiDimensionality>
<FilterStopWords>true</FilterStopWords>
<IgnoreSpace>true</IgnoreSpace>
<ForceSingleWord>false</ForceSingleWord>
<TraditionalChineseEnabled>false</TraditionalChineseEnabled>
<OutputSimplifiedTraditional>false</OutputSimplifiedTraditional>
<UnknownWordIdentify>true</UnknownWordIdentify>
<FilterEnglish>false</FilterEnglish>
<FilterNumeric>false</FilterNumeric>
<IgnoreCapital>false</IgnoreCapital>
<EnglishSegment>false</EnglishSegment>
<SynonymOutput>false</SynonymOutput>
<WildcardOutput>false</WildcardOutput>
<WildcardSegment>false</WildcardSegment>
<CustomRule>false</CustomRule>
</MatchOptions>
<Parameters>
<UnknowRank>1</UnknowRank>
<BestRank>5</BestRank>
<SecRank>3</SecRank>
<ThirdRank>2</ThirdRank>
<SingleRank>1</SingleRank>
<NumericRank>1</NumericRank>
<EnglishRank>5</EnglishRank>
<EnglishLowerRank>3</EnglishLowerRank>
<EnglishStemRank>2</EnglishStemRank>
<SymbolRank>1</SymbolRank>
<SimplifiedTraditionalRank>1</SimplifiedTraditionalRank>
<SynonymRank>1</SynonymRank>
<WildcardRank>1</WildcardRank>
<FilterEnglishLength>0</FilterEnglishLength>
<FilterNumericLength>0</FilterNumericLength>
<CustomRuleAssemblyFileName>CustomRuleExample.dll</CustomRuleAssemblyFileName>
<CustomRuleFullClassName>CustomRuleExample.PickupNokia</CustomRuleFullClassName>
<Redundancy>0</Redundancy>
</Parameters>
</PanGuSettings>

 

 

其中DictionaryPath 指明字典所在目录,可以为相对路径也可以为绝对路径。
MatchOptions 对应分词选项
Parameters 对于分词参数

高亮组件PanGu.HighLight.dll 调用方法

//创建HTMLFormatter,参数为高亮单词的前后缀
PanGu.HighLight.SimpleHTMLFormatter simpleHTMLFormatter =
new PanGu.HighLight.SimpleHTMLFormatter("<font color=\"red\">", "</font>");
//创建Highlighter ,输入HTMLFormatter 和盘古分词对象Semgent
PanGu.HighLight.Highlighter highlighter =
new PanGu.HighLight.Highlighter(simpleHTMLFormatter,
new Segment());
//设置每个摘要段的字符数
highlighter.FragmentSize = 50;
//获取最匹配的摘要段
String abstract = highlighter.GetBestFragment(keywords, news.Content);

 

 

 

时间: 2024-09-20 00:36:10

盘古分词,记灵一下的相关文章

盘古分词-Lucen.net搜索的时候,怎么让输入的关键词先显示,然后再显示单个的字

问题描述 Lucen.net搜索的时候,怎么让输入的关键词先显示,然后再显示单个的字 我用lucene.net和盘古分词结合,对txt文档实现了搜索,但搜索结果的排序有问题,比如,我搜索"方法",盘古分词会先对"方法'进行分词,分为"方"."方法'."法",然后搜索结果会把含有"方"和"法"的文档和含有"方法"的文档都显示出来,但是我想把含有"方法"

求教关于lucene.net盘古分词器的问题

问题描述 我在搜索中加入了盘古分词器之后,用panguanalyzer替代了standardanalyzer,但是建立新的索引之后的搜索貌似是搜索到一个关键词就返回一次结果,所以搜索结果大量重复,求怎么解决....z这是搜索方法的代码,求大神解救.....privatevoidsearch(){DateTimestart=DateTime.Now;//createthesearcher//indexisplacedin"index"subdirectorystringindexDire

LuceneNet+盘古分词

问题描述 网站有1000多万数据,全站搜索使用了LuceneNet+盘古分词,网站启动后就自动加载分词文件,但是每个词第一次搜索都要几秒或上十秒以上,第二次后再搜索这个词就只使用几ms就出来了,请问有什么办法让每个词的第一次搜索都能秒显? 解决方案 解决方案二:将加载分词文件后的数据缓存起来,可以吗?解决方案三:写个软件都相关的词都自动查一遍解决方案四:引用1楼hanjun0612的回复: 将加载分词文件后的数据缓存起来,可以吗? 已经做了缓存的,就是网站启动加载后就缓存下来了解决方案五:引用2

lucene.net 3.0.3、结合盘古分词进行搜索的小例子(分页功能)

添加:2013-12-25 更新:2013-12-26 新增分页功能. 更新:2013-12-27 新增按分类查询功能,调整索引行新增记录的图片字段. 最新盘古分词dll和词典管理工具下载:http://pangusegment.codeplex.com/ 词典下载:http://pangusegment.codeplex.com/releases/view/47411  //封装类 using System; using System.Collections.Generic; using Sy

让盘古分词支持最新的Lucene.Net 3.0.3

原文:让盘古分词支持最新的Lucene.Net 3.0.3 好多年没升级过的Lucene.Net最近居然升级了,到了3.0.3后接口发生了很大变化,原来好多分词库都不能用了,所以上次我把MMSeg给修改了一下支持了Lucene.Net 3.0.3(参考<基于MMSeg算法的中文分词类库>). 然后我知道了.Net下还有一个盘古分词(http://pangusegment.codeplex.com/),但也不支持Lucene.Net 3.0.3,网上也不少人在问,于是就下载了它的最新代码,基于L

盘古分词用自定义字典

问题描述 如图.....请问下盘古分词工具怎么设置自定义字典来分词.把自带的分词删掉...添加自己的字典 解决方案 解决方案二:下载字段管理工具,里面有一个dictManager.exe下载地址http://download.csdn.net/detail/fangmenglong12/5298566#comment

TreeSplitter---树形分词算法

注:思路不是原创,首先感谢思维的突发奇想者 一. 说明: 目前分词的算法很多,现成的分词组件也不少,但很难找到一个我自己需要的,我只要一个分词功能,一个能理所当然完成分词工作的东西,理所当然是指词库里有什么词就能分出什么词.一些智能分词的目标是毋庸置疑的,难度也是随着智能的程度而增加,不是你我(只少不是我)随随便便走在大街上就能突发奇想出来的.一些成熟的分词方法是基于词库的,本着DRY原则以至于DRO(Don't repeat others),君要了解请看这里或直接Google.其中的不足,思路

[python] 使用Jieba工具中文分词及文本聚类概念

        前面讲述了很多关于Python爬取本体Ontology.消息盒InfoBox.虎扑图片等例子,同时讲述了VSM向量空间模型的应用.但是由于InfoBox没有前后文和语义概念,所以效果不是很好,这篇文章主要是爬取百度5A景区摘要信息,再利用Jieba分词工具进行中文分词,最后提出文本聚类算法的一些概念知识.         相关文章:         [Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒         [python爬虫] Seleni

11款开放中文分词引擎大比拼

来自: http://blog.csdn.net/matthewei6/article/details/50610882 在逐渐步入DT(Data Technology)时代的今天,自然语义分析技术越发不可或缺.对于我们每天打交道的中文来说,并没有类似英文空格的边界标志.而理解句子所包含的词语,则是理解汉语语句的第一步.汉语自动分词的任务,通俗地说,就是要由机器在文本中的词与词之间自动加上空格. 一提到自动分词,通常会遇到两种比较典型的质疑.一种质疑是来自外行人的:这件事看上去平凡之极,好像一点