盘古分词,记灵一下

简介: http://pangusegment.codeplex.com PanGu.dll 调用方法 初始化 在进程启动时,我们需要对盘古分词进行初始化,初始化的调用代码如下: 默认方式初始化 PanGu.

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);

 

 

 

目录
相关文章
|
3月前
|
机器学习/深度学习 存储 搜索推荐
NVIDIA Ampere 架构的结构化稀疏功能及其在搜索引擎中的应用
NVIDIA Ampere架构引入了结构化稀疏功能,显著加速了深度学习模型的推理过程。通过2:4的稀疏模式,即每4个相邻权重中有至少2个为0,实现了高效的内存访问和模型推理加速,同时保持了模型精度。腾讯机器学习平台部门利用这一特性,通过渐进式训练方法,实现了模型在搜索引擎中的高效部署与应用,如相关性预测、查询性能预测等场景,不仅提升了处理速度,还在某些情况下超过了原有模型的精度。此外,NVIDIA还提供了TensorRT和cuSPARSELt库,进一步增强了稀疏模型的推理效率。
37 0
 NVIDIA Ampere 架构的结构化稀疏功能及其在搜索引擎中的应用
|
6月前
|
机器学习/深度学习 自然语言处理 算法
分词算法在自然语言处理中的应用与性能比较
分词算法在自然语言处理中的应用与性能比较
|
机器学习/深度学习 编解码 自然语言处理
用语言直接检索百万视频,这是阿里TRECVID 视频检索冠军算法
利用自然语言检索百万视频,人物、场景、事件都不能放过,这就是既困难又吸引了众多研究者的视频检索任务。
1260 0
用语言直接检索百万视频,这是阿里TRECVID 视频检索冠军算法
|
存储 负载均衡 并行计算
图数据库中的“分布式”和“数据切分”(切图)
什么是分布式系统?为什么需要分布式系统呢?在本文,我们简单讲解下分布式内容,再快速切入的图数据库,了解图数据库的独有数据切分方式,以及各大图数据库产品是如何处理切图的/
344 0
|
机器学习/深度学习 自然语言处理
NLP 基础之分词、向量化、词性标注
NLP 基础之分词、向量化、词性标注
344 0
NLP 基础之分词、向量化、词性标注
|
机器学习/深度学习 自然语言处理 算法
NLP(2) | 中文分词分词的概念分词方法分类CRFHMM分词
NLP(2) | 中文分词分词的概念分词方法分类CRFHMM分词
182 0
NLP(2) | 中文分词分词的概念分词方法分类CRFHMM分词
|
存储 自然语言处理 架构师
每秒20W次并发分词检索,架构如何设计?
短文本,高并发,支持分词,不用实时更新的检索场景,可以使用:ES,杀鸡用牛刀、分词+DAT(trie)、分词+内存hash等解决。
973 0
每秒20W次并发分词检索,架构如何设计?
|
自然语言处理 索引 数据库
如何快速实现高并发短文检索
某并发量很大,数据量适中的业务线需要实现一个“标题检索”的功能
677 0
|
自然语言处理 分布式计算 Spark
spark集群使用hanlp进行分布式分词操作说明
本篇分享一个使用hanlp分词的操作小案例,即在spark集群中使用hanlp完成分布式分词的操作,文章整理自【qq_33872191】的博客,感谢分享!以下为全文:   分两步: 第一步:实现hankcs.
14666 0
|
自然语言处理 搜索推荐 大数据
NLPIR语义分词技术给自然语言处理带来新驱动
NLPIR能够全方位多角度满足应用者对大数据文本的处理需求,包括大数据完整的技术链条:网络采集、正文提取、中英文分词、词性标注、实体抽取、词频统计、关键词提取、语义信息抽取、文本分类、情感分析、语义深度扩展、繁简编码转换、自动注音、文本聚类等。
1613 0