如何转换文字怎么把READ格式转换为TXT比如CRF转换TXT

I hear and I forget. I see and I remember. I do and I understand!
CRF模型在NLP中的运用
一、 CRF模型
  CRF(Conditional Random Field) 条件随机场是近几年自然语言处理领域常用的算法之一,基于统计学的模型。CRF本质上是隐含变量的马尔科夫链+可观测状态到隐含变量的条件概率。CRF是判别模型,其原理如下:
如何用简单易懂的例子解释隐马尔可夫模型?
CRF与HMM(隐马尔可夫模型)的区别:
二、 CRF运用场景
(1) 基于字标注的分词
(2) 基于词或字标注的主题提取(人名、地名、机构名、品牌、商品等实体识别)
三、 CRF使用过程
  在词料方面,业界的研究和评测往往基于98年人民日报或微软亚洲研究院的语料,两者都进行了比较权威的分词和词性标注。目前封闭测试最好的结果是4-tag+CFR标注分词,在北大语料库上可以在准确率,召回率以及F值上达到92%以上的效果,在微软语料库上可以到达96%以上的效果。下文中代码和文本举例基于98年人民日报实验。
分词过程概述:
  CRF是基于序列标注的分词。其中标注标签(tag)一般分两种:4-tag(BMES)和6-tag(BB2B3MES)。下面用4-tag(B:M:E:S:single)举例说明分词过程。
本文采用CRF++的工具包,使用方法参照以下:
CRF++工具包使用介绍:
下面实现其过程:
(1) 准备训练样本
  CRF所需的训练样本格式,每行【一个字+\t+tag】,不同句子间用空行隔开,举例如下(文件名:pku_training.txt):
由分词文件生成样本数据:
import codecs
import sys
file_orig_path = r'/home/songhongwei/jd/xstore/word/crf/icwb2-data/training/pku_word.txt
file_train_path = r'/home/songhongwei/jd/xstore/word/crf/crf_text/ pku_training.txt '
def character_tagging(input_file, output_file):
input_data = codecs.open(input_file, 'r', 'utf-8')
output_data = codecs.open(output_file, 'w', 'utf-8')
for line in input_data.readlines():
word_list = line.strip().split()
for word in word_list:
if len(word) == 1:
output_data.write(word + "\tS\n")
output_data.write(word[0] + "\tB\n")
for w in word[1:len(word)-1]:
output_data.write(w + "\tM\n")
output_data.write(word[len(word)-1] + "\tE\n")
output_data.write("\n")
input_data.close()
output_data.close()
print('生成训练文件完成!')
if __name__ == '__main__':
character_tagging(file_orig_path, file_train_path)
(2) 创建特征模板(文件名:template)
U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
U04:%x[2,0]
U08:%x[-1,0]/%x[0,0]
U09:%x[0,0]/%x[1,0]
U05:%x[-2,0]/%x[-1,0]/%x[0,0]
U06:%x[-1,0]/%x[0,0]/%x[1,0]
U07:%x[0,0]/%x[1,0]/%x[2,0]
  T**:%x[#,#]中的T表示模板类型,两个”#”分别表示相对的行偏移与列偏移。每行就是一个函数模板。
一共有两种模板:
第一种是Unigram template:第一个字符是U,这是用于描述unigram feature的模板。每一行%x[#,#]生成一个CRFs中的点(state)函数: f(s, o), 其中s为t时刻的的标签(output),o为t时刻的上下文.如CRF++说明文件中的示例函数:
func1 = if (output = B and feature=”U02:那”) return 1 else return 0
它是由U02:%x[0,0]在输入文件的第一行生成的点函数.将输入文件的第一行”代入”到函数中,函数返回1,同时,如果输入文件的某一行在第1列也是“那”,并且它的output(第2列)同样也为B,那么这个函数在这一行也返回1。
  第二种是Bigram template:第一个字符是B,每一行%x[#,#]生成一个CRFs中的边(Edge)函数:f(s’, s, o), 其中s’为t – 1时刻的标签.也就是说,Bigram类型与Unigram大致机同,只是还要考虑到t – 1时刻的标签.如果只写一个B的话,默认生成f(s’, s),这意味着前一个output token和current token将组合成bigram features。
  如果L是输出的类型数,N是定义的unique特征模板个数。只使用Unigram template,一个模型生成的特征函数总数为L*N;只使用Bigram template相当于使用前一个output token和current token组合成bigram features;同时使用二者将产生特征函数总数为L*L*N。
对crf++的template的理解:
(3) 根据CRF训练模型,获得model文件
训练样本格式:
crf_learn -f 3 -c 4.0 模板文件 训练样本文件 输出model文件
crf_learn -f 3 -c 4.0 template pku_training.txt model(只输出一个二进制的model文件)
或crf_learn -f 3 -c 4.0 template pku_training.txt model –t(输出一个二进制的model文件和一个文本类型的model.txt文件,一般用于调试分析)
有四个主要的参数可以调整:
-a CRF-L2 or CRF-L1
规范化算法选择。默认是CRF-L2。一般来说L2算法效果要比L1算法稍微好一点,虽然L1算法中非零特征的数值要比L2中大幅度的小。
这个参数设置CRF的hyper-parameter。c的数值越大,CRF拟合训练数据的程度越高。这个参数可以调整过度拟合和不拟合之间的平衡度。这个参数可以通过交叉验证等方法寻找较优的参数。
这个参数设置特征的cut-off threshold。CRF++使用训练数据中至少NUM次出现的特征。默认值为1。当使用CRF++到大规模数据时,只出现一次的特征可能会有几百万,这个选项就会在这样的情况下起到作用。
如果电脑有多个CPU,那么那么可以通过多线程提升训练速度。NUM是线程数量。
Ps:全部可选参数如下:
-f, –freq=INT使用属性的出现次数不少于INT(默认为1)
-m, –maxiter=INT设置INT为LBFGS的最大迭代次数 (默认10k)
-c, –cost=FLOAT
设置FLOAT为代价参数,过大会过度拟合 (默认1.0)
-e, –eta=FLOAT设置终止标准FLOAT(默认0.0001)
-C, –convert将文本模式转为二进制模式
-t, –textmodel为调试建立文本模型文件
-a, –algorithm=(CRF|MIRA)
选择训练算法,默认为CRF-L2
-p, –thread=INT线程数(默认1),利用多个CPU减少训练时间
-H, –shrinking-size=INT
设置INT为最适宜的跌代变量次数 (默认20)
-v, –version显示版本号并退出
-h, –help显示帮助并退出
输出说明:
iter:迭代次数。当迭代次数达到maxiter时,迭代终止
terr:标记错误率
serr:句子错误率
obj:当前对象的值。当这个值收敛到一个确定值的时候,训练完成
diff:与上一个对象值之间的相对差。当此值低于eta时,训练完成
CRF模型格式:
测试样本格式:
crf_test -m 模板文件 测试样本文件 & 重定向结果文件
crf_test -m model pku_testing.txt & pku_result.txt
预测结果是在每行后面添加一列显示预测标签,如下图,第一列为文本,第二列为标注tag,第三列为预测tag。
(4) 待分词文本预测
当一个新的文本用于预测时候,可以通过两种方式:
(1) 调用工具库一行一行的预测,可以参考如下代码;
import codecs
import sys
import CRFPP
file_orig_path = r'/home/songhongwei/jd/xstore/word/text/pku_testing.txt '
file_test_path = r'/home/songhongwei/jd/xstore/word/crf/crf_text/pku_result.txt '
file_model_path = r'/home/songhongwei/jd/xstore/word/crf/crf_text/crf_model'
def crf_segmenter(input_file, output_file, tagger):
input_data = codecs.open(input_file, 'r', 'utf-8')
output_data = codecs.open(output_file, 'w', 'utf-8')
for line in input_data.readlines():
tagger.clear()
for word in line.strip():
word = word.strip()
tagger.add((word + "\to\tB").encode('utf-8'))
tagger.parse()
size = tagger.size()
xsize = tagger.xsize()
for i in range(0, size):
for j in range(0, xsize):
char = tagger.x(i, j).decode('utf-8')
tag = tagger.y2(i)
if tag == 'B':
output_data.write(' ' + char)
elif tag == 'M':
output_data.write(char)
elif tag == 'E':
output_data.write(char + ' ')
output_data.write(' ' + char + ' ')
output_data.write('\n')
input_data.close()
output_data.close()
if __name__ == '__main__':
crf_model = file_model_path
input_file = file_orig_path
output_file = file_test_path
tagger = CRFPP.Tagger("-m " + crf_model)
crf_segmenter(input_file, output_file, tagger)
(2) 借用crf_test批量预测,即把句子转换为每行一个字,不同句子用空行隔开(类似于训练样本,只是每行只有第一列即可),调用crf_test命令后给出预测tag后,再调用程序处理即可。
注:熟悉了CRF整个运行原理,剩下的工作就是:准备样本数据-调用命令训练模型-预测文本tag-生成分词文本。其中准备样本数据和生成分词文本只需生成的正确的格式即可(具体什么语言实现倒无所谓了)
四、 CRF使用总结
  CRF是使用机器学习的方式,能够通过不断的迭代学习,逐渐增强其分词效果。CRF适用一些判别或提取信息的场景,而对一些“无中生有”的场景显然就不合适。明白了CRF的运行原理,那么基于词标注的信息提取的理解也就是水到渠成的事了,网站针对这方面的讲解也较多了,这里就不再讲解了。运用CRF的关键就是适合自己场景的标注样本就显得很重要了,一方面可以通过其他方法获得一些原始数据,再通过CRF的学习后,对一些错误样本纠正后放入原始样本后重新训练等方法,这段时间一直在学NLP相关的方法,对分词、主题提取、文本分类(fasttext、textgrocery等)等方向有了更深入的了解,本文是整理网上资料和自己理解并实践后的总结,如有误欢迎留言讨论谢谢!
没有更多推荐了,82284 条评论分享收藏感谢收起用CRF++开源工具做文本序列标注教程有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。本文只介绍如何快速的使用CRF++做序列标注,对其中的原理和训练测试参数不做介绍。官网地址:主要完成如下功能:输入 -& "周杰伦是谁"
输出 -& "[周杰伦:artist]是谁"
一、资源准备下载链接中的内容:链接:https://pan.baidu.com/s/16iw3WBSHI1U5U1G_xbikDA 密码:cfqi
该文件夹里面包含了以下内容:1、CRF++-0.58.tar.gz,CRF++开源工具,这个是从CRF++官网上下载的。2、data文件夹,训练和测试需要的数据,这个是我自己写的,其中:input文件夹,存放所需要的数据:train_data.txt,训练数据,这里只有几条作为示例,实际工程中,需要上万条数据;test_data.txt,测试数据;crf.template,特征模板。output文件夹 -& 输出的模型和测试结果。3、code文件夹,C++调用CRF++接口的代码示例,这个是我自己写的。二、CRF++的编译按照如下命令进行:tar zxvf CRF++-0.58.tar.gz
cd CRF++-0.58
./configure
sudo make install
这时候就编译安装成功了。cd /usr/local/bin
cd /usr/local/lib
切换到上面这两个目录,bin目录下可以看到crf_learn和crf_test两个可执行程序,分别用于模型的训练和测试; lib目录下是生成的CRF++库。//备注1:CRF++-0.58/.libs,这个目录下也有生成上述可执行程序和库。
//备注2:如果不想安装到上述目录,或者没有root权限,在configure的时候指定安装目录即可。
三、模型训练按照如下命令进行:cd CRF++_tutorial/data
./train.sh
这样,我们就得到了模型,即output/crf.mdl文件,这个文件是二进制的没办法查看。train.sh脚本内容如下:#/usr/local/bin/crf_learn: 前面编译生成的crf++的训练工具
#input/crf.template: 特征模板
#input/train_data.txt: 训练数据
#output/crf.mdl: 训练输出的模型
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
/usr/local/bin/crf_learn input/crf.template input/train_data.txt output/crf.mdl
训练数据格式如下:四、测试按照如下命令进行:cd CRF++_tutorial/data
这样,我们就得到了预测的结果,即output/test_result.txt文件,可以打开看下预测结果。test.sh脚本内容如下:#/usr/local/bin/crf_test: 前面编译生成的crf++的测试工具
#-m output/crf.mdl: train.sh脚本训练输出的crf模型
#input/test_data.txt: 测试数据
#-o output/test_result.txt: 输出测试结果
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
/usr/local/bin/crf_test -m output/crf.mdl input/test_data.txt -o output/test_result.txt
测试数据格式如下(testdata和traindata需要用相同的编码格式,不然没法解析):测试结果如下,虽然训练数据只有几条,但测试结果还是挺准的哈:五、C++接口调用示例按照如下命令进行:cd CRF++_tutorial/code
./crf_test
程序输出结果如下:具体调用流程请参考CRF++_tutorial/code/main.cpp代码如下:#include &iostream&
#include &string&
#include &vector&
#include "crfpp.h"
int main()
//& 0.测试输入
vector&string&
query.push_back("周");
query.push_back("杰");
query.push_back("伦");
query.push_back("是");
query.push_back("谁");
//& 1.模型加载
cout && "&&&&&& Begin to load crf++ model……" &&
CRFPP::Model* crf_model_ = CRFPP::createModel("-m ../data/output/crf.mdl -v 3");
cout && "&&&&&& Success to load crf++ model !" &&
//& 2.创建CRF++对象
CRFPP::Tagger* tagger = crf_model_-&createTagger();
//& 3.add query
vector&string&::iterator it = query.begin();
for ( ; it != query.end(); it++){
tagger-&add((*it).c_str());
//& 4.对query进行标注
if (!tagger-&parse()){
cout && "&&&&&& Fail to parse !" &&
return -1;
//& 5.打印标注结果
cout && "标注结果: " &&
for (size_t i = 0; i & tagger-&size(); i++){
cout && query[i] && " " && tagger-&y2(i) &&
赞同 分享收藏Http://///
格式工厂FormatFactory 4.170 去广告绿色版_万能的视频音频格式转换器 格式工厂 绿色版
本站软件用迅雷或快车下载,一般是满速下载的。
参考大小:62 MB&&[由于更新频繁,该参数只作参考]
最后更新: 13:48:58
【请在下载地址上:右键-->迅雷或快车下载】
绿盟一般无下载不了的(发布24小时内有专人检查)[由于访问量大,建议用 迅雷 下载]
软件简介:
虽然很大,但是这个软件很好用啊,值得拥有!格式工厂是个和很不错的软件,有了它能为您减少很多不必要的麻烦,例如;广告横幅,对话框会卡死等等问题!格式工厂是个比较全面的转格式工具,如MP4& /3GP /MPG &/AVI& /WMV& /FLV& /SWF& /JPG& /BMP& /PNG& /TIF& /ICO& /GIF& /TGA& /MP3& /WMA& /AMR& /OGG& /AAC& /WAV,只需鼠标轻轻点点就可以轻轻松松转换! v4.0加入最新的HEVC(H265)编码,MP4,MKV的压缩比大幅度提高优化了默认码率的算法加入编码的CRF支持更新了一些编码器的版本35HanLP: Han Language Processing汉语言处理包HanLP是由一系列模型与算法组成的Java工具包,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。HanLP提供下列功能:中文分词最短路分词N-最短路分词CRF分词索引分词极速词典分词用户自定义词典词性标注命名实体识别中国人名识别音译人名识别日本人名识别地名识别实体机构名识别关键词提取TextRank关键词提取自动摘要TextRank自动摘要短语提取基于互信息和左右信息熵的短语提取拼音转换多音字声母韵母声调简繁转换繁体中文分词简繁分歧词(简体、繁体、臺灣正體、香港繁體)文本推荐语义推荐拼音推荐字词推荐依存句法分析基于神经网络的高性能依存句法分析器MaxEnt依存句法分析CRF依存句法分析语料库工具分词语料预处理词频词性词典制作BiGram统计词共现统计CoNLL语料预处理CoNLL UA/LA/DA评测工具在提供丰富功能的同时,HanLP内部模块坚持低耦合、模型坚持惰性加载、服务坚持静态提供、词典坚持明文发布,使用非常方便,同时自带一些语料处理工具,帮助用户训练自己的模型。项目主页HanLP下载地址:Solr、Lucene插件:更多细节:下载与配置方式一、Maven为了方便用户,特提供内置了数据包的Portable版,只需在pom.xml加入:&dependency&
&groupId&com.hankcs&/groupId&
&artifactId&hanlp&/artifactId&
&version&portable-1.3.4&/version&
&/dependency&零配置,即可使用基本功能(除CRF分词、依存句法分析外的全部功能)。如果用户有自定义的需求,可以参考方式二,使用hanlp.properties进行配置。方式二、下载jar、data、hanlp.propertiesHanLP将数据与程序分离,给予用户自定义的自由。1、下载jar2、下载data数据包功能体积(MB)全部255下载后解压到任意目录,接下来通过配置文件告诉HanLP数据包的位置。HanLP中的数据分为词典和模型,其中词典是词法分析必需的,模型是句法分析必需的。data
├─dictionary
└─model用户可以自行增删替换,如果不需要句法分析功能的话,随时可以删除model文件夹。模型跟词典没有绝对的区别,隐马模型被做成人人都可以编辑的词典形式,不代表它不是模型。GitHub代码库中已经包含了data.zip中的词典,直接编译运行自动缓存即可;模型则需要额外下载。3、配置文件示例配置文件:在GitHub的发布页中,hanlp.properties一般和jar打包在同一个zip包中。配置文件的作用是告诉HanLP数据包的位置,只需修改第一行root=usr/home/HanLP/为data的父目录即可,比如data目录是/Users/hankcs/Documents/data,那么root=/Users/hankcs/Documents/。如果选用mini词典的话,则需要修改配置文件:CoreDictionaryPath=data/dictionary/CoreNatureDictionary.mini.txt
BiGramDictionaryPath=data/dictionary/CoreNatureDictionary.ngram.mini.txt最后将HanLP.properties放入classpath即可,对于任何项目,都可以放到src或resources目录下,编译时IDE会自动将其复制到classpath中。如果放置不当,HanLP会智能提示当前环境下的合适路径,并且尝试从项目根目录读取数据集。调用方法HanLP几乎所有的功能都可以通过工具类HanLP快捷调用,当你想不起来调用方法时,只需键入HanLP.,IDE应当会给出提示,并展示HanLP完善的文档。推荐用户始终通过工具类HanLP调用,这么做的好处是,将来HanLP升级后,用户无需修改调用代码。所有Demo都位于下,比文档覆盖了更多细节,强烈建议运行一遍。1. 第一个DemoSystem.out.println(HanLP.segment("你好,欢迎使用HanLP汉语处理包!"));内存要求HanLP对词典的数据结构进行了长期的优化,可以应对绝大多数场景。哪怕HanLP的词典上百兆也无需担心,因为在内存中被精心压缩过。如果内存非常有限,请使用小词典。HanLP默认使用大词典,同时提供小词典,请参考配置文件章节。写给正在编译HanLP的开发者如果你正在编译运行从Github检出的HanLP代码,并且没有下载data缓存,那么首次加载词典/模型会发生一个自动缓存的过程。自动缓存的目的是为了加速词典载入速度,在下次载入时,缓存的词典文件会带来毫秒级的加载速度。由于词典体积很大,自动缓存会耗费一些时间,请耐心等待。自动缓存缓存的不是明文词典,而是双数组Trie树、DAWG、AhoCorasickDoubleArrayTrie等数据结构。2. 标准分词List&Term&termList=StandardTokenizer.segment("商品和服务");System.out.println(termList);说明HanLP中有一系列“开箱即用”的静态分词器,以Tokenizer结尾,在接下来的例子中会继续介绍。HanLP.segment其实是对StandardTokenizer.segment的包装。分词结果包含词性,每个词性的意思请查阅。算法详解3. NLP分词List&Term&termList=NLPTokenizer.segment("中国科学院计算技术研究所的宗成庆教授正在教授自然语言处理课程");System.out.println(termList);说明NLP分词NLPTokenizer会执行全部命名实体识别和词性标注。4. 索引分词List&Term&termList=IndexTokenizer.segment("主副食品");for(Termterm:termList)
{System.out.println(term+"["+term.offset+":"+(term.offset+term.word.length())+"]");
}说明索引分词IndexTokenizer是面向搜索引擎的分词器,能够对长词全切分,另外通过term.offset可以获取单词在文本中的偏移量。5. N-最短路径分词SegmentnShortSegment=newNShortSegment().enableCustomDictionary(false).enablePlaceRecognize(true).enableOrganizationRecognize(true);SegmentshortestSegment=newDijkstraSegment().enableCustomDictionary(false).enablePlaceRecognize(true).enableOrganizationRecognize(true);String[] testCase=newString[]{"今天,刘志军案的关键人物,山西女商人丁书苗在市二中院出庭受审。","刘喜杰石国祥会见吴亚琴先进事迹报告团成员",
};for(Stringsentence:testCase)
{System.out.println("N-最短分词:"+nShortSegment.seg(sentence)+"\n最短路分词:"+shortestSegment.seg(sentence));
}说明N最短路分词器NShortSegment比最短路分词器慢,但是效果稍微好一些,对命名实体识别能力更强。一般场景下最短路分词的精度已经足够,而且速度比N最短路分词器快几倍,请酌情选择。算法详解6. CRF分词Segmentsegment=newCRFSegment();
segment.enablePartOfSpeechTagging(true);List&Term&termList=segment.seg("你看过穆赫兰道吗");System.out.println(termList);for(Termterm:termList)
{if(term.nature==null)
{System.out.println("识别到新词:"+term.word);
}说明CRF对新词有很好的识别能力,但是开销较大。算法详解7. 极速词典分词/*** 演示极速分词,基于AhoCorasickDoubleArrayTrie实现的词典分词,适用于“高吞吐量”“精度一般”的场合* @author hankcs*/publicclassDemoHighSpeedSegment{publicstaticvoidmain(String[]args)
{Stringtext="江西鄱阳湖干枯,中国最大淡水湖变成大草原";System.out.println(SpeedTokenizer.segment(text));longstart=System.currentTimeMillis();intpressure=1000000;for(inti=0; i&++i)
{SpeedTokenizer.segment(text);
}doublecostTime=(System.currentTimeMillis()-start)/(double)1000;System.out.printf("分词速度:%.2f字每秒", text.length()*pressure/costTime);
}说明极速分词是词典最长分词,速度极其快,精度一般。在i7上跑出了2000万字每秒的速度。算法详解8. 用户自定义词典/*** 演示用户词典的动态增删** @author hankcs*/publicclassDemoCustomDictionary{publicstaticvoidmain(String[]args)
{//动态增加CustomDictionary.add("攻城狮");//强行插入CustomDictionary.insert("白富美","nz 1024");//删除词语(注释掉试试)//CustomDictionary.remove("攻城狮");System.out.println(CustomDictionary.add("单身狗","nz 1024 n 1"));System.out.println(CustomDictionary.get("单身狗"));Stringtext="攻城狮逆袭单身狗,迎娶白富美,走上人生巅峰";//怎么可能噗哈哈!//AhoCorasickDoubleArrayTrie自动机分词finalchar[] charArray=text.toCharArray();CustomDictionary.parseText(charArray,newAhoCorasickDoubleArrayTrie.IHit&CoreDictionary.Attribute&()
{@Overridepublicvoidhit(intbegin,intend,CoreDictionary.Attributevalue)
{System.out.printf("[%d:%d]=%s %s\n", begin, end,newString(charArray, begin, end-begin), value);
});//trie树分词BaseSearchersearcher=CustomDictionary.getSearcher(text);Map.Entrywhile((entry=searcher.next())!=null)
{System.out.println(entry);
}//标准分词System.out.println(HanLP.segment(text));
}说明CustomDictionary是一份全局的用户自定义词典,可以随时增删,影响全部分词器。另外可以在任何分词器中关闭它。通过代码动态增删不会保存到词典文件。追加词典CustomDictionary主词典文本路径是data/dictionary/custom/CustomDictionary.txt,用户可以在此增加自己的词语(不推荐);也可以单独新建一个文本文件,通过配置文件CustomDictionaryPath=data/dictionary/custom/CustomDictionary. 我的词典.来追加词典(推荐)。始终建议将相同词性的词语放到同一个词典文件里,便于维护和分享。词典格式每一行代表一个单词,格式遵从[单词] [词性A] [A的频次] [词性B] [B的频次] ...如果不填词性则表示采用词典的默认词性。词典的默认词性默认是名词n,可以通过配置文件修改:全国地名大全.如果词典路径后面空格紧接着词性,则该词典默认是该词性。在基于层叠隐马模型的最短路分词中,并不保证自定义词典中的词一定被切分出来。关于用户词典的更多信息请参考词典说明一章。算法详解9. 中国人名识别String[] testCase=newString[]{"签约仪式前,秦光荣、李纪恒、仇和等一同会见了参加签约的企业家。","王国强、高峰、汪洋、张朝阳光着头、韩寒、小四","张浩和胡健康复员回家了","王总和小丽结婚了","编剧邵钧林和稽道青说","这里有关天培的有关事迹","龚学平等领导,邓颖超生前",
};Segmentsegment=HanLP.newSegment().enableNameRecognize(true);for(Stringsentence:testCase)
{List&Term&termList=segment.seg(sentence);System.out.println(termList);
}说明目前分词器基本上都默认开启了中国人名识别,比如HanLP.segment()接口中使用的分词器等等,用户不必手动开启;上面的代码只是为了强调。有一定的误命中率,比如误命中关键年,则可以通过在data/dictionary/person/nr.txt加入一条关键年 A 1来排除关键年作为人名的可能性,也可以将关键年作为新词登记到自定义词典中。如果你通过上述办法解决了问题,欢迎向我提交pull request,词典也是宝贵的财富。算法详解10. 音译人名识别String[] testCase=newString[]{"一桶冰水当头倒下,微软的比尔盖茨、Facebook的扎克伯格跟桑德博格、亚马逊的贝索斯、苹果的库克全都不惜湿身入镜,这些硅谷的科技人,飞蛾扑火似地牺牲演出,其实全为了慈善。","世界上最长的姓名是简森·乔伊·亚历山大·比基·卡利斯勒·达夫·埃利奥特·福克斯·伊维鲁莫·马尔尼·梅尔斯·帕特森·汤普森·华莱士·普雷斯顿。",
};Segmentsegment=HanLP.newSegment().enableTranslatedNameRecognize(true);for(Stringsentence:testCase)
{List&Term&termList=segment.seg(sentence);System.out.println(termList);
}说明目前分词器基本上都默认开启了音译人名识别,用户不必手动开启;上面的代码只是为了强调。算法详解11. 日本人名识别String[] testCase=newString[]{"北川景子参演了林诣彬导演的《速度与激情3》","林志玲亮相网友:确定不是波多野结衣?",
};Segmentsegment=HanLP.newSegment().enableJapaneseNameRecognize(true);for(Stringsentence:testCase)
{List&Term&termList=segment.seg(sentence);System.out.println(termList);
}说明目前标准分词器默认关闭了日本人名识别,用户需要手动开启;这是因为日本人名的出现频率较低,但是又消耗性能。算法详解12. 地名识别String[] testCase=newString[]{"武胜县新学乡政府大楼门前锣鼓喧天","蓝翔给宁夏固原市彭阳县红河镇黑牛沟村捐赠了挖掘机",
};Segmentsegment=HanLP.newSegment().enablePlaceRecognize(true);for(Stringsentence:testCase)
{List&Term&termList=segment.seg(sentence);System.out.println(termList);
}说明目前标准分词器都默认关闭了地名识别,用户需要手动开启;这是因为消耗性能,其实多数地名都收录在核心词典和用户自定义词典中。在生产环境中,能靠词典解决的问题就靠词典解决,这是最高效稳定的方法。算法详解13. 机构名识别String[] testCase=newString[]{"我在上海林原科技有限公司兼职工作,","我经常在台川喜宴餐厅吃饭,","偶尔去地中海影城看电影。",
};Segmentsegment=HanLP.newSegment().enableOrganizationRecognize(true);for(Stringsentence:testCase)
{List&Term&termList=segment.seg(sentence);System.out.println(termList);
}说明目前分词器默认关闭了机构名识别,用户需要手动开启;这是因为消耗性能,其实常用机构名都收录在核心词典和用户自定义词典中。HanLP的目的不是演示动态识别,在生产环境中,能靠词典解决的问题就靠词典解决,这是最高效稳定的方法。算法详解14. 关键词提取Stringcontent="程序员(英文Programmer)是从事程序开发、维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。软件从业人员分为初级程序员、高级程序员、系统分析员和项目经理四大类。";List&String&keywordList=HanLP.extractKeyword(content,5);System.out.println(keywordList);说明内部采用TextRankKeyword实现,用户可以直接调用TextRankKeyword.getKeywordList(document, size)算法详解15. 自动摘要Stringdocument="算法可大致分为基本算法、数据结构的算法、数论算法、计算几何的算法、图的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法、厄米变形模型、随机森林算法。\n"+"算法可以宽泛的分为三类,\n"+"一,有限的确定性算法,这类算法在有限的一段时间内终止。他们可能要花很长时间来执行指定的任务,但仍将在一定的时间内终止。这类算法得出的结果常取决于输入值。\n"+"二,有限的非确定算法,这类算法在有限的时间内终止。然而,对于一个(或一些)给定的数值,算法的结果并不是唯一的或确定的。\n"+"三,无限的算法,是那些由于没有定义终止定义条件,或定义的条件无法由输入的数据满足而不终止运行的算法。通常,无限算法的产生是由于未能确定的定义终止条件。";List&String&sentenceList=HanLP.extractSummary(document,3);System.out.println(sentenceList);说明内部采用TextRankSentence实现,用户可以直接调用TextRankSentence.getTopSentenceList(document, size)。算法详解16. 短语提取Stringtext="算法工程师\n"+"算法(Algorithm)是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。算法工程师就是利用算法处理事物的人。\n"+"\n"+"1职位简介\n"+"算法工程师是一个非常高端的职位;\n"+"专业要求:计算机、电子、通信、数学等相关专业;\n"+"学历要求:本科及其以上的学历,大多数是硕士学历及其以上;\n"+"语言要求:英语要求是熟练,基本上能阅读国外专业书刊;\n"+"必须掌握计算机相关知识,熟练使用仿真工具MATLAB等,必须会一门编程语言。\n"+"\n"+"2研究方向\n"+"视频算法工程师、图像处理算法工程师、音频算法工程师 通信基带算法工程师\n"+"\n"+"3目前国内外状况\n"+"目前国内从事算法研究的工程师不少,但是高级算法工程师却很少,是一个非常紧缺的专业工程师。算法工程师根据研究领域来分主要有音频/视频算法处理、图像技术方面的二维信息算法处理和通信物理层、雷达信号处理、生物医学信号处理等领域的一维信息算法处理。\n"+"在计算机音视频和图形图像技术等二维信息算法处理方面目前比较先进的视频处理算法:机器视觉成为此类算法研究的核心;另外还有2D转3D算法(2D-to-3D conversion),去隔行算法(de-interlacing),运动估计运动补偿算法(Motion estimation/Motion Compensation),去噪算法(Noise Reduction),缩放算法(scaling),锐化处理算法(Sharpness),超分辨率算法(Super Resolution),手势识别(gesture recognition),人脸识别(face recognition)。\n"+"在通信物理层等一维信息领域目前常用的算法:无线领域的RRM、RTT,传送领域的调制解调、信道均衡、信号检测、网络优化、信号分解等。\n"+"另外数据挖掘、互联网搜索算法也成为当今的热门方向。\n"+"算法工程师逐渐往人工智能方向发展。";List&String&phraseList=HanLP.extractPhrase(text,10);System.out.println(phraseList);说明内部采用MutualInformationEntropyPhraseExtractor实现,用户可以直接调用MutualInformationEntropyPhraseExtractor.extractPhrase(text, size)。算法详解17. 拼音转换/*** 汉字转拼音* @author hankcs*/publicclassDemoPinyin{publicstaticvoidmain(String[]args)
{Stringtext="重载不是重任";List&Pinyin&pinyinList=HanLP.convertToPinyinList(text);System.out.print("原文,");for(charc:text.toCharArray())
{System.out.printf("%c,", c);
}System.out.println();System.out.print("拼音(数字音调),");for(Pinyinpinyin:pinyinList)
{System.out.printf("%s,", pinyin);
}System.out.println();System.out.print("拼音(符号音调),");for(Pinyinpinyin:pinyinList)
{System.out.printf("%s,", pinyin.getPinyinWithToneMark());
}System.out.println();System.out.print("拼音(无音调),");for(Pinyinpinyin:pinyinList)
{System.out.printf("%s,", pinyin.getPinyinWithoutTone());
}System.out.println();System.out.print("声调,");for(Pinyinpinyin:pinyinList)
{System.out.printf("%s,", pinyin.getTone());
}System.out.println();System.out.print("声母,");for(Pinyinpinyin:pinyinList)
{System.out.printf("%s,", pinyin.getShengmu());
}System.out.println();System.out.print("韵母,");for(Pinyinpinyin:pinyinList)
{System.out.printf("%s,", pinyin.getYunmu());
}System.out.println();System.out.print("输入法头,");for(Pinyinpinyin:pinyinList)
{System.out.printf("%s,", pinyin.getHead());
}System.out.println();
}说明HanLP不仅支持基础的汉字转拼音,还支持声母、韵母、音调、音标和输入法首字母首声母功能。HanLP能够识别多音字,也能给繁体中文注拼音。最重要的是,HanLP采用的模式匹配升级到AhoCorasickDoubleArrayTrie,性能大幅提升,能够提供毫秒级的响应速度!算法详解18. 简繁转换/*** 简繁转换* @author hankcs*/publicclassDemoTraditionalChinese2SimplifiedChinese{publicstaticvoidmain(String[]args)
{System.out.println(HanLP.convertToTraditionalChinese("用笔记本电脑写程序"));System.out.println(HanLP.convertToSimplifiedChinese("「以後等妳當上皇后,就能買士多啤梨慶祝了」"));
}说明HanLP能够识别简繁分歧词,比如打印机=印表機。许多简繁转换工具不能区分“以后”“皇后”中的两个“后”字,HanLP可以。算法详解19. 文本推荐/*** 文本推荐(句子级别,从一系列句子中挑出与输入句子最相似的那一个)* @author hankcs*/publicclassDemoSuggester{publicstaticvoidmain(String[]args)
{Suggestersuggester=newSuggester();String[] titleArray=("威廉王子发表演说 呼吁保护野生动物\n"+"《时代》年度人物最终入围名单出炉 普京马云入选\n"+"“黑格比”横扫菲:菲吸取“海燕”经验及早疏散\n"+"日本保密法将正式生效 日媒指其损害国民知情权\n"+"英报告说空气污染带来“公共健康危机”").split("\\n");for(Stringtitle:titleArray)
suggester.addSentence(title);
}System.out.println(suggester.suggest("发言",1));//语义System.out.println(suggester.suggest("危机公共",1));//字符System.out.println(suggester.suggest("mayun",1));//拼音}
}说明在搜索引擎的输入框中,用户输入一个词,搜索引擎会联想出最合适的搜索词,HanLP实现了类似的功能。可以动态调节每种识别器的权重20. 语义距离/*** 语义距离* @author hankcs*/publicclassDemoWordDistance{publicstaticvoidmain(String[]args)
{String[] wordArray=newString[]
{"香蕉","苹果","白菜","水果","蔬菜","自行车","公交车","飞机","买","卖","购入","新年","春节","丢失","补办","办理","送给","寻找","孩子","教室","教师","会计",
};for(Stringa:wordArray)
{for(Stringb:wordArray)
{System.out.println(a+"\t"+b+"\t之间的距离是\t"+CoreSynonymDictionary.distance(a, b));
}说明设想的应用场景是搜索引擎对词义的理解,词与词并不只存在“同义词”与“非同义词”的关系,就算是同义词,它们之间的意义也是有微妙的差别的。算法为每个词分配一个语义ID,词与词的距离通过语义ID的差得到。语义ID通过《同义词词林扩展版》计算而来。21. 依存句法分析/*** 依存句法分析(CRF句法模型需要-Xms512m -Xmx512m -Xmn256m,MaxEnt和神经网络句法模型需要-Xms1g -Xmx1g -Xmn512m)* @author hankcs*/publicclassDemoDependencyParser{publicstaticvoidmain(String[]args)
{CoNLLSentencesentence=HanLP.parseDependency("徐先生还具体帮助他确定了把画雄鹰、松鼠和麻雀作为主攻目标。");System.out.println(sentence);//可以方便地遍历它for(CoNLLWordword:sentence)
{System.out.printf("%s --(%s)--& %s\n",word.LEMMA,word.DEPREL,word.HEAD.LEMMA);
}//也可以直接拿到数组,任意顺序或逆序遍历CoNLLWord[] wordArray=sentence.getWordArray();for(inti=wordArray.length-1; i&=0; i--)
{CoNLLWordword=wordArray[i];System.out.printf("%s --(%s)--& %s\n",word.LEMMA,word.DEPREL,word.HEAD.LEMMA);
}//还可以直接遍历子树,从某棵子树的某个节点一路遍历到虚根CoNLLWordhead=wordArray[12];while((head=head.HEAD)!=null)
{if(head==CoNLLWord.ROOT)System.out.println(head.LEMMA);elseSystem.out.printf("%s --(%s)--&",head.LEMMA,head.DEPREL);
}说明内部采用NeuralNetworkDependencyParser实现,用户可以直接调用NeuralNetworkDependencyParser.compute(sentence)也可以调用基于最大熵的依存句法分析器MaxEntDependencyParser.compute(sentence)算法详解词典说明本章详细介绍HanLP中的词典格式,满足用户自定义的需要。HanLP中有许多词典,它们的格式都是相似的,形式都是文本文档,随时可以修改。基本格式词典分为词频词性词典和词频词典。词频词性词典(如CoreNatureDictionary.txt)每一行代表一个单词,格式遵从[单词] [词性A] [A的频次] [词性B] [B的频次] ...。支持省略词性和频次,直接一行一个单词。.txt词典文件的分隔符为空格或制表符,所以不支持含有空格的词语。如果需要支持空格,请使用英文逗号,分割的纯文本.csv文件。在使用Excel等富文本编辑器时,则请注意保存为纯文本形式。词频词典(如CoreNatureDictionary.ngram.txt)每一行代表一个单词或条目,格式遵从[单词] [单词的频次]。每一行的分隔符为空格或制表符。少数词典有自己的专用格式,比如同义词词典兼容《同义词词林扩展版》的文本格式,而转移矩阵词典则是一个csv表格。下文主要介绍通用词典,如不注明,词典特指通用词典。数据结构Trie树(字典树)是HanLP中使用最多的数据结构,为此,我实现了通用的Trie树,支持泛型、遍历、储存、载入。用户自定义词典采用AhoCorasickDoubleArrayTrie和二分Trie树储存,其他词典采用基于实现的。储存形式词典有两个形态:文本文件(filename.txt)和缓存文件(filename.txt.bin或filename.txt.trie.dat和filename.txt.trie.value)。文本文件采用明文储存,UTF-8编码,CRLF换行符。缓存文件就是一些二进制文件,通常在文本文件的文件名后面加上.bin表示。有时候是.trie.dat和.trie.value。后者是历史遗留产物,分别代表trie树的数组和值。如果你修改了任何词典,只有删除缓存才能生效。修改方法HanLP的核心词典训练自人民日报2014语料,语料不是完美的,总会存在一些错误。这些错误可能会导致分词出现奇怪的结果,这时请打开调试模式排查问题:HanLP.Config.enableDebug();核心词性词频词典比如你在data/dictionary/CoreNatureDictionary.txt中发现了一个不是词的词,或者词性标注得明显不对,那么你可以修改它,然后删除缓存文件使其生效。目前CoreNatureDictionary.ngram.txt的缓存依赖于CoreNatureDictionary.txt的缓存,修改了后者之后必须同步删除前者的缓存,否则可能出错核心二元文法词典二元文法词典data/dictionary/CoreNatureDictionary.ngram.txt储存的是两个词的接续,如果你发现不可能存在这种接续时,删掉即可。你也可以添加你认为合理的接续,但是这两个词必须同时在核心词典中才会生效。命名实体识别词典基于角色标注的命名实体识别比较依赖词典,所以词典的质量大幅影响识别质量。这些词典的格式与原理都是类似的,请阅读或代码修改它。如果问题解决了,欢迎向我提交一个pull request,这是我在代码库中保留明文词典的原因,众人拾柴火焰高!版权上海林原信息科技有限公司Apache License Version 2.0HanLP产品初始知识产权归上海林原信息科技有限公司所有,任何人和企业可以无偿使用,可以对产品、源代码进行任何形式的修改,可以打包在其他产品中进行销售。任何使用了HanLP的全部或部分功能、词典、模型的项目、产品或文章等形式的成果必须显式注明HanLP及此项目主页。鸣谢感谢下列优秀开源项目:感谢NLP界各位学者老师的著作:《基于角色标注的中国人名自动识别研究》张华平 刘群《基于层叠隐马尔可夫模型的中文命名实体识别》俞鸿魁 张华平 刘群 吕学强 施水才《基于角色标注的中文机构名识别》俞鸿魁 张华平 刘群《基于最大熵的依存句法分析》 辛霄 范士喜 王轩 王晓龙An Efficient Implementation of Trie Structures, JUN-ICHI AOE AND KATSUSHI MORIMOTOTextRank: Bringing Order into Texts, Rada Mihalcea and Paul Tarau感谢上海林原信息科技有限公司的刘先生,允许我利用工作时间开发HanLP,提供服务器和域名,并且促成了开源。感谢诸位用户的关注和使用,HanLP并不完善,未来还恳求各位NLP爱好者多多关照,提出宝贵意见。作者日
相关 [github hankcs hanlp] 推荐:
HanLP是由一系列模型与算法组成的Java工具包,目标是普及自然语言处理在生产环境中的应用. HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点. 基于互信息和左右信息熵的短语提取. 简繁分歧词(简体、繁体、臺灣正體、香港繁體). 基于神经网络的高性能依存句法分析器. CoNLL UA/LA/DA评测工具.
There are two ways to have a fast learning algorithm: (a) start with a slow algorithm and speed it up, or (b) build an intrinsically fast learning algorithm.
- linyehui - 没做完,没准备好
在此贴上本人在Web标准化交流会6月25日北京站的主题分享. 在线PPT:http://jinjiang.github.com/slides/learning-git/. PPT源码:https://github.com/Jinjiang/slides/tree/gh-pages/learning-git.
- CSDN博客推荐文章
来自:https://github.com/neuola/neuola-legacy/wiki/github%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97. 如果你只是想了解 github 的使用,请跳到 Github 简介一节. 作为程序员大军之一,想必大家有这样的经历吧.
- 收集分享互联网资源
基于HTML5的专业级图像处理开源引擎.
- CSDN博客研发管理推荐文章
TortoiseGit依赖msysgit,首先下载:
http://code.google.com/p/msysgit/downloads/detail?name=msysGit-fullinstall-1.8.1.2-preview.exe&can=2&q=. 再下载TortoiseGit:
http://code.google.com/p/tortoisegit/wiki/Download?tm=2.
- IT瘾-dev
Github Trending基本上是我每天都会浏览的网页,上面会及时发布一些GIthub上比较有潜力的项目,或者说每日Star数增量排行榜. 不过由于Github Trending经常会实时更新,即使你访问得再勤,难免还是会错过一些你感兴趣的项目,为此不少人都想出了自己的解决办法,例如. josephyzhou,他的
github-trending项目得到了众多人的青睐,我仔细阅读了他的源码 (Go),发现实现也较为简单, 就用Python 重写了一下,发现代码少了好多,详见 我的
github-trending.
https://clickhouse.yandex/tutorial.html快速搭建集群参考. https://clickhouse.yandex/reference_en.html官网文档. https://habrahabr.ru/company/smi2/blog/317682/关于集群配置参考.
- pipitu - Solidot
51开源社区 写道 "Gibhub用户数已突破一百万,Github官方博客发布了庆祝图片. 目前已有1,004,771用户,在Github托管了超过2,836,210 个git库. Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理. 推出后,Git在其它项目中也取得了很大成功,尤其是在Ruby社区中.
- wang - Solidot
在kernel.org服务器遭入侵之后,Linux作者Linus Torvalds于9月3日在Github上创建了帐号,将内核源代码托管到了Github. 他在邮件列表上解释说,由于master.kernel.org下线,他建立了一个临时的源代码托管仓库.
--> 坚持分享优质有趣的原创文章,并保留作者信息和版权声明,任何问题请联系:itarea.。

我要回帖

更多关于 TXT文件转换bmp格式 的文章

 

随机推荐