自然语言处理-中文分词程序实验报告(含源代码)
实验指导书一

一实验目的本实验学习如何在利用NLTK进行分词\词性分析与句法分析,同时将NLTK和结巴分词的结合中实现中文文本分词和词频统计。
通过次实验项目的练习,增强学生对课堂理论知识的理解,帮助学生以知识获取与自主实践相结合,学习对自然语言信息的处理以及结巴分词,文本相似度算法的实践。
二实验目标1. 了解自然语言处理的原理,加深对文本处理的理解;2. 熟悉文本分词、词频统计的原理;4. 掌握文本处理的其他的应用。
三实验要求1.实验前,请认真阅读学习《自然语言处理》和实验指导书,仔细听从老师的讲解。
2.实验前编好程序,实验时调试。
3.编程要独立完成,程序应加适当的注释。
4.完成实验报告。
四实验报告要求内页:实验n :1、实验目的:xxxx2、实验原理和内容:3、实验环境和编程语言:4、主要功能及实现:5、实验结论:文字用小4号或4号;程序和注释用5号以班为单位交.实验一:1.怎样载入自己的英文语料库(obama.txt),在自己的语料库中找出频率小于8,排名前5的词和其频率。
(使用nltk的英文分词函数tokenize)2.写程序处理布朗语料库,找到一下的答案:(1)哪些名词常以他们复数形式而不是它们的单数形式出现?(只考虑常规的复数形式,-s后缀形式的)。
(2)选择布朗语料库的不同部分(其他目录),计数包含wh的词,如:what,when,where,who 和why。
3.输出brown文本集名词后面接的词性,参考代码:4.句法分析演示>>> from nltk import *>>> f=open('F://obama.txt')>>> raw=f.read()>>> import nltk>>> tokens = nltk.word_tokenize(raw)>>> tokens>>> c={}>>> for i in tokens:if tokens.count(i)>72:c[i]=tokens.count(i)>>> print(c)Wh:>>> from nltk.corpus import brown>>> import nltk>>> import re>>> brown.categories()>>> romance_text=brown.words(categories='romance')>>> fdist = nltk.FreqDist([w.lower() for w in romance_text])>>> modals=set([w for w in romance_text if re.search('^wh',w)])>>> for m in modals:print m + ':',fdist[m],词性:>>> def findtags(tag_prefix,tagged_text):cfd=nltk.ConditionalFreqDist((tag,word) for (word,tag) in tagged_textif tag.startswith(tag_prefix))return dict((tag,cfd[tag].keys()[:5]) for tag in cfd.conditions())>>> tagdict=findtags('NN',nltk.corpus.brown.tagged_words(categories='news')) >>> for tag in sorted(tagdict):print tag,tagdict[tag]>>> wsj = nltk.corpus.treebank.tagged_words(tagset = 'universal')>>> word_tag_fd = nltk.FreqDist(wsj)>>> [word + "/" + tag for (word, tag) in word_tag_fd if tag.startswith('V')]Ofen:>>> brown_lrnd_tagged = brown.tagged_words(categories='learned', tagset='universal') >>> tags = [b[1] for (a, b) in nltk.bigrams(brown_lrnd_tagged) if a[0] == 'often']>>> fd = nltk.FreqDist(tags)>>> fd.tabulate()名词后面词性统计:>>> import nltk>>> brown_lrnd_tagged = brown.tagged_words(categories='learned', tagset='universal') >>> tags = [b[1] for (a, b) in nltk.bigrams(brown_lrnd_tagged) if a[1] == 'NOUN'] >>> fd = nltk.FreqDist(tags)>>> fd.tabulate()。
自然语言处理(snownlp)算法

自然语言处理(snownlp)算法
自然语言处理(SnowNLP)算法是一个面向中文自然语言处理任务的 Python 库,它包含了多种自然语言处理相关的算法,以下是一些核心功能所涉及的算法和技术:
1、分词:
SnowNLP 使用基于统计模型的分词方法,对输入的中文文本进行有效分词,将连续的汉字序列切分成一个个单独的词语。
2、词性标注:
虽然在描述中未明确提到词性标注,但很多中文 NLP 库包括了这项功能,即识别每个词在句子中的语法角色。
3、情感分析:
SnowNLP 实现了情感倾向分析算法,能够计算出一段文本的情感极性,通常返回的是一个介于0到1之间的浮点数,数值越接近1表示情感越积极,越接近0则表示越消极。
4、关键词抽取:
利用 TF-IDF 或者其他的文本摘要算法来提取文本的关键信息,找到最具代表性的关键词。
5、文本摘要:
提供文本摘要功能,可能采用基于权重或基于机器学习的方法,从原文中抽取出关键句子形成摘要。
6、拼音转换:
包含将汉字转换为拼音的功能,用于语音合成或其他需要拼音信息的应用场景。
7、繁简体转换:
支持简体与繁体中文之间的转换。
8、统计信息计算:
提供计算词频(Term Frequency, TF)和逆文档频率(Inverse Document Frequency, IDF)的能力,这两个指标常用于文本挖掘和信息检索领域的特征权
重计算。
这些算法的实现背后可能涉及到如最大熵模型、隐马尔可夫模型、TF-IDF、余弦相似度等多种统计学习和机器学习技术。
随着自然语言处理领域的发展,SnowNLP 库也在不断迭代更新以适应新的技术和需求。
(完整word版)自然语言处理实验报告

“自然语言处理”实验报告专业:智能科学与技术班级:1501学号:0918150102姓名:宋晓婷日期:2018/4/16目录实验1 (3)1、实验目的: (3)2、实验原理和内容: (3)3、实验环境和编程语言: (3)4、主要功能及实现: (3)5、实验结论 (8)实验2 中文分词 (8)1、实验目的和内容 (8)2、实验原理 (9)3、实验平台及语言 (10)4、主要功能及实现 (11)4.1 算法流程图 (11)4.2实验结果 (11)5、实验结论 (13)实验三中文文本分类 (13)1、小组成员以及分工 (13)2、实验目的和内容 (13)3、实验原理以及数据处理 (14)4、实验平台和语言 (16)5、实验结果 (16)6、实验结论 (16)四、实验1-3 代码 (17)实验11、实验目的:本实验学习如何在利用NLTK进行分词\词性分析与句法分析,。
通过次实验项目的练习,增强学生对课堂理论知识的理解,帮助学生以知识获取与自主实践相结合,学习对英文自然语言信息的处理的实践。
2、实验原理和内容:NLTK自然语言处理工具包,里面包含了许多处理自然语言的库可以直接调用,本实验利用NLTK对obama。
txt语料库进行对应的分词和词频统计,再对布朗语料库进行词性和句法分析。
3、实验环境和编程语言:windows下anaconda3 spyder(python3.6)4、主要功能及实现:4.1 怎样载入自己的英文语料库(obama.txt),在自己的语料库中找出responsibility,education和working出现的频率及其他们词干出现的频率。
(使用nltk的英文分词函数tokenize和stem)。
①使用open以及read函数读取obama.txt文档,调用nltk里面的word_tokenize()函数,先把文档进行分词,再调用nltk中的FreDist()函数进行词频统计。
统计responsibility,education和working出现的频率。
Python中文自然语言处理基础与实战教学教案(全)

Python中文自然语言处理基础与实战教学教案(全)第一章:Python中文自然语言处理简介1.1 自然语言处理的概念1.2 Python在自然语言处理中的应用1.3 中文自然语言处理的基本流程1.4 中文分词与词性标注1.5 中文命名实体识别第二章:Python中文文本处理基础2.1 文本预处理2.2 中文停用词去除2.3 词干提取与词形还原2.4 中文分词算法介绍2.5 Python库在中国分词中的应用第三章:Python中文词性标注3.1 词性标注的概念与作用3.2 基于规则的词性标注方法3.3 基于机器学习的词性标注方法3.4 Python词性标注库介绍3.5 词性标注的实战应用第四章:Python中文命名实体识别4.1 命名实体识别的概念与作用4.2 基于规则的命名实体识别方法4.3 基于机器学习的命名实体识别方法4.4 Python命名实体识别库介绍4.5 命名实体识别的实战应用第五章:Python中文情感分析5.1 情感分析的概念与作用5.2 基于词典的情感分析方法5.3 基于机器学习的情感分析方法5.4 Python情感分析库介绍5.5 情感分析的实战应用本教案将为您提供Python中文自然语言处理的基础知识与实战应用。
通过学习,您将掌握Python在中文自然语言处理中的应用,包括文本预处理、中文分词、词性标注、命名实体识别和情感分析等方面。
每个章节都包含相关概念、方法、库介绍和实战应用,帮助您深入了解并实践中文自然语言处理。
希望本教案能为您在学习Python 中文自然语言处理方面提供帮助。
第六章:Python中文文本分类6.1 文本分类的概念与作用6.2 特征提取与降维6.3 常用的文本分类算法6.4 Python文本分类库介绍6.5 中文文本分类的实战应用第七章:Python中文信息抽取7.1 信息抽取的概念与作用7.2 实体抽取与关系抽取7.3 事件抽取与意见抽取7.4 Python信息抽取库介绍7.5 中文信息抽取的实战应用第八章:Python中文文本8.1 文本的概念与作用8.2 模型与判别模型8.3 循环神经网络(RNN)与长短时记忆网络(LSTM)8.4 Python文本库介绍8.5 中文文本的实战应用第九章:Python中文对话系统9.1 对话系统的概念与作用9.2 对话系统的类型与架构9.3 式对话模型与检索式对话模型9.4 Python对话系统库介绍9.5 中文对话系统的实战应用第十章:Python中文语音识别与合成10.1 语音识别与合成的概念与作用10.2 基于深度学习的语音识别与合成方法10.3 Python语音识别与合成库介绍10.4 中文语音识别与合成的实战应用10.5 语音识别与合成的综合实战项目第十一章:Python中文语义理解11.1 语义理解的概念与作用11.2 词嵌入与语义表示11.3 语义分析与语义相似度计算11.4 Python语义理解库介绍11.5 中文语义理解的实战应用第十二章:Python中文问答系统12.1 问答系统的概念与作用12.2 基于知识图谱的问答方法12.3 基于机器学习的问答方法12.4 Python问答系统库介绍12.5 中文问答系统的实战应用第十三章:Python中文文本摘要13.1 文本摘要的概念与作用13.2 提取式摘要与式摘要13.3 文本摘要的评价指标13.4 Python文本摘要库介绍13.5 中文文本摘要的实战应用第十五章:Python中文自然语言处理综合实战15.1 自然语言处理综合实战项目介绍15.2 项目需求分析与设计15.3 项目实施与技术选型15.4 项目测试与优化15.5 项目总结与展望重点和难点解析重点:Python在中文自然语言处理中的应用场景。
自然语言处理实验报告

自然语言处理实验报告一、实验背景自然语言处理(Natural Language Processing, NLP)是人工智能领域的一个重要分支,旨在使计算机能够理解、解释和生成人类语言。
在本次实验中,我们将探讨NLP在文本分类任务上的应用。
二、实验数据我们选取了一个包含新闻文本的数据集作为实验数据,共包括数千条新闻文本样本,每个样本均有对应的类别标签,如政治、经济、体育等。
三、实验步骤1. 数据预处理:首先对文本数据进行清洗,如去除标点符号、停用词和数字等干扰项,然后对文本进行分词处理。
2. 特征提取:选取TF-IDF(Term Frequency-Inverse Document Frequency)作为特征提取方法,将文本表示为向量形式。
3. 模型选择:本次实验中我们选择了朴素贝叶斯分类器作为文本分类的基本模型。
4. 模型训练:将数据集按照8:2的比例划分为训练集和测试集,用训练集对模型进行训练。
5. 模型评估:使用测试集对训练好的模型进行评估,计算准确率、召回率和F1值等指标。
四、实验结果经过多次实验和调优,我们最终得到了一个在文本分类任务上表现良好的模型。
在测试集上,我们的模型达到了90%以上的准确率,表现优异。
五、实验总结通过本次实验,我们深入了解了自然语言处理在文本分类任务上的应用。
同时,我们也发现了一些问题和改进空间,如模型泛化能力不足、特征选择不合适等,这些将是我们未来研究的重点方向。
六、展望未来在未来的研究中,我们将进一步探索不同的特征提取方法和模型结构,以提升文本分类的准确率和效率。
同时,我们还将探索深度学习等新领域的应用,以更好地解决自然语言处理中的挑战和问题。
七、参考文献1. Jurafsky, D., & Martin, J. H. (2019). Speech and Language Processing (3rd ed.). Pearson.2. Manning, C. D., Raghavan, P., & Schütze, H. (2008). Introduction to Information Retrieval. Cambridge University Press.以上为自然语言处理实验报告的内容,希望对您有所帮助。
自然语言处理实验—文本分类

自然语言处理实验—文本分类
实验目的:
文本分类是自然语言处理中的重要任务之一,旨在将文本按照预定义的类别进行分类。
本实验旨在使用自然语言处理技术,对给定的文本数据集进行分类。
实验步骤:
1. 数据集准备:选择合适的文本数据集作为实验数据,确保数据集包含已经标注好的类别信息。
2. 数据预处理:对文本数据进行预处理,包括去除特殊字符、分词、停用词处理、词形还原等步骤。
3. 特征提取:选择合适的特征提取方法,将文本转化为向量表示。
常用的特征提取方法包括词袋模型、TF-IDF等。
4. 模型选择:选择合适的分类模型,如朴素贝叶斯、支持向量机、深度学习模型等。
5. 模型训练:使用训练集对选择的分类模型进行训练。
6. 模型评估:使用测试集对训练好的分类模型进行评估,计算分类准确率、精确率、召回率等指标。
7. 结果分析:分析实验结果,对分类结果进行调整和改进。
注意事项:
1. 数据集的选择应该符合实验目的,且包含足够的样本和类别信息。
2. 在预处理和特征提取过程中,需要根据实验需求进行适当的调整
和优化。
3. 模型选择应根据实验数据的特点和要求进行选择,可以尝试多种模型进行比较。
4. 在模型训练和评估过程中,需要注意模型的调参和过拟合问题,并及时进行调整。
5. 结果分析过程可以包括对错分类样本的分析,以及对模型的改进和优化思路的探讨。
实验结果:
实验结果包括模型的分类准确率、精确率、召回率等指标,以及对实验结果的分析和改进思路。
根据实验结果,可以对文本分类问题进行更深入的研究和探讨。
[自然语言处理]中文分词技术
![[自然语言处理]中文分词技术](https://img.taocdn.com/s3/m/7bd8157eb94ae45c3b3567ec102de2bd9605deb0.png)
[⾃然语⾔处理]中⽂分词技术背景最近接触到了⼀些NLP⽅⾯的东西,感觉还蛮有意思的,本⽂写⼀下分词技术。
分词是⾃然语⾔处理的基础,如果不采⽤恰当的分词技术,直接将⼀个⼀个汉字输⼊,不仅时间复杂度会⾮常⾼,⽽且准确度不⾏。
⽐如:“东北⼤学”若直接拆分,会和“北⼤”相关联,但其实没有意义。
有没有英⽂分词?西⽅⽂字天然地通过空格来将句⼦分割成词语,因此⼀般不需要分词。
但是东⽅⽂字往往没有天然形成的分隔符,因此需要将中⽂进⾏分词。
中⽂分词的理论基础⽬前中⽂分词都是基于三种⽅法:基于词典的⽅法、基于统计的⽅法、基于机器学习的⽅法。
基于词典的⽅法该⽅法的基础很容易理解,就是实现给定⼀个词库,然后通过某种匹配⼿段将⽂本和词库⾥边的词进⾏匹配,从⽽实现分词的效果。
最常见的匹配⼿段是最⼤正向匹配,该⽅法顾名思义,就是从左到右依次扫描,将能够匹配到的最长的词作为⼀个分出来的单词。
该⽅法的明显缺点是会产⽣歧义。
例如:“南京市长江⼤桥”会被分成“南京市长/江/⼤桥”。
鉴于此状况,⼜有学者提出了最⼤逆向匹配,就是反过来从右到左进⾏匹配,如“南京市长江⼤桥”就会被分割为“南京市/长江⼤桥”。
这是正确的。
汉语中偏正结构的语法较多,总体上逆向匹配的正确率更⾼点。
另外还有⼀种⽅法叫做双向匹配法,就是把上述两种⽅法⼀起⽤。
如果正向和反向的分词结果⼀样,那就认为是正确的,否则再选取⼀些规则重新判别。
基于词典的⽅法,优点在于速度快,简单易于理解。
但是缺点在于只能解决有限程度上的歧义,⽽且如果词库过⼤,则歧义更为严重。
基于统计的⽅法该⽅法的⽬的是为了解决歧义的。
该⽅法⾸先将⽂本全分割,也就是将⽂本的所有可能的分割⽅法全部穷尽,然后构造⼀个⽆环图。
然后计算从开始到结束那条路的概率最⼤,那么哪条路就是分词结果。
计算概率的⽅法是:对于⼀个中⽂字符串“a1a2a3...an”如何正确的⽤词语c1,c2..cm表⽰就是中⽂分词的任务,也就是说我们要去找寻P(c1c2..cm)最⼤的分词,按照马尔科夫链的想法就是说我们就是求P(c1)*P(c1|c2)*P(c1c2|c3)*...P(c1c2...cm-1|cm)最⼤。
《自然语言处理》教学上机实验报告

《⾃然语⾔处理》教学上机实验报告《⾃然语⾔处理》教学上机实验报告实验⼀基于规则的分词算法实验⽬的和要求:掌握完全切分,正向最长匹配,逆向最长匹配,双向最长匹配,⽐较三种匹配效率。
实验过程:1.基于字典、词库匹配的分词⽅法(基于规则)。
这种⽅法是将待分的句⼦与⼀个充分⼤的词典中的词语进⾏匹配。
常⽤的有:正向最⼤匹配,逆向最⼤匹配,最少切分法。
实际应⽤中,将机械分词作为初分⼿段,利⽤语⾔信息提⾼切分准确率。
优先识别具有明显特征的词,以这些词为断点,将原字符串分为较⼩字符串再机械匹配,以减少匹配错误率,或将分词与词类标注结合。
2.完全算法指的是,找出⼀段⽂本中的所有单词。
这并不是标准意义上的分词,有些⼈将这个过程误称为分词,其实并不准确。
伪代码:def fully_segment(text, dic):word_list =[]for i in range(len(text)): # i从0遍历到text的最后⼀个字的下标for j in range(i +1,len(text)+1): # j遍历[i +1,len(text)]区间word = text[i:j] # 取出连续区间[i, j)对应的字符串if word in dic: # 如果在词典中,则认为是⼀个词word_list.append(word)return word_list在正向最长匹配算法中,算法有可能分出不太令⼈满意的结果,此时,我们可以尝试逆向最长匹配算法。
3.逆向最长匹配算法和正向匹配⽅法类似,都是找出⼀段⽂本中的所有单词,有所不同的是,逆向最长匹配算法是从逆向来寻找词的。
伪代码:def backward_segment(text, dic):word_list =[]i =len(text)-1while i >=0: # 扫描位置作为终点longest_word = text[i] # 扫描位置的单字for j in range(0, i): # 遍历[0, i]区间作为待查询词语的起点word = text[j: i +1] # 取出[j, i]区间作为待查询单词if word in dic:if len(word)>len(longest_word): # 越长优先级越⾼longest_word = wordword_list.insert(0, longest_word) # 逆向扫描,因此越先查出的单词在位置上越靠后i -=len(longest_word)return word_list4.⼈们经过尝试上述两种算法,发现有时正向匹配正确,有时逆向匹配正确,但似乎逆向匹配成功的次数更多。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4
汉字编码格式:UTF-8
中文处理和英文处理的一个很大不同就在于编码格式的复杂性。常见的中文编码 格式有 GB2312,GB18030,GBK,Unicode 等等。同样的中文字符,在不同的汉字 编码格式中,可能有不同的二进制表示。因此编程做字符串匹配时,通常要求统一的 编码格式。 在 linux 下可以用 file 命令查看文本文件的编码格式。经过检查,发现老师提供的 词典和语料属于不同的编码格式,直接做字符串匹配可能会有问题。 考虑到 UBUNTU 以 UTF-8 作为默认编码格式,我索性使用 enconv 命令将词典和语料都转换成 UTF-8 格式。 下面简要介绍一下 UTF-8 格式。 前 面 提 到 的 Unicode 的 学 名 是 "Universal Multiple-Octet Coded Character Set",简称为 UCS。UCS 可以看作是"Unicode Character Set"的缩写。 UCS 只是规定如何编码,并没有规定如何传输、保存这个编码。UTF-8 是被广泛 接受的方案。UTF-8 的一个特别的好处是它与 ISO-8859-1 完全兼容。UTF 是“UCS Transformation Format”的缩写。 UTF-8 就是以 8 位为单元对 UCS 进行编码。 从 UCS-2 到 UTF-8 的编码方式如下: UCS-2 编码(16 进制) 0000 – 007F 0080 – 07FF 0800 – FFFF UTF-8 字节流(二进制) 0xxxxxxx 110xxxxx 10xxxxxx 1110xxxx 10xxxxxx 10xxxxxx
5
程序流程图
6
7
程序源代码
/* * segment.cpp ---- 中文分词程序 * * 功能:1)中文词典分词(逆向最大匹配) * 2)数字分词 * 3)西文分词 * 4)时间分词 * 用法: * ./segment ARTICAL * 范例: * ./segment 1998-01-qiefen-file.txt.utf8 * 屏幕输出: * 词典读入完毕,耗时 0.000776 s * 分词完毕,耗时 3.18 s * * 分词结果保存在 result.txt.utf8 中。 * * 注意:1)本程序只能处理 utf-8 文本,其他格式的文本请用 iconv 或 enconv 转换成 utf-8 格式。 * 2 ) 程 序 运 行 需 要 dict/CoreDict.txt.utf8,dict/number.txt.utf8,dict/unit.txt.utf8 三个文件。 * * 参考了以下文章,特此感谢! * /maximum-matching-method-of-chinese-wordsegmentation/ * * Created on: 2010-11-30 * Author: xuweilin <usa911 at > */
北京邮电大学计算机学院 《自然语言处理导论》 中文分词实验报告
姓 名: 许伟林 学 号: 08211306 指导教师: 郑岩 日 期: 2010/12/22
1
内容目录
一、实验目的...............................................................3 二、实验环境...............................................................3 三、实验材料...............................................................3 四、实验设计...............................................................3 一、分词策略.............................................................3 词典逆向最大匹配法...................................................4 基于确定文法的分词法.................................................4 二、程序设计.............................................................4 查找算法:哈希表查找.................................................4 汉字编码格式:UTF-8...................................................5 程序流程图............................................................6 程序源代码............................................................8 五、结果和性能分析........................................................16 分词结果示例............................................................16 性能分析................................................................17 六、有待解决的问题........................................................18 七、实验总结..............................................................19
基于确定文法的分词法
基于确定文法的分词法可以进行数字、西文、时间的分词,设计思路是这样的: 1、 增加一个词典,存储中文编码(全角)的大小写拉丁字母、 中文小写数字、 阿 拉伯数字、 数字单位(百、 千、 万、 亿、 兆)、 小数点、 百分号、 除号;词类型记为[D1]; 2、 增加一个词典,存储中文编码的时间单位,包括年、 月、 日、 时、 分、 秒、 点;词 类型记为[D2]; 3、 文法的正则表达式为[D1]*[D2]?。
3
由于时间仓促,且水平有限,本程序只实现了第 2 种和第 3 种分词法,即词典逆 向最大匹配法和基于确定文法的分词法。
词典逆向最大匹配法
词典逆向最大匹配法完成分词的大部分工作,设计思路是这样的: 1、 将词典的每个词条读入内存,最长是 4 字词,最短是 1 字词; 2、 从语料中读入一段(一行)文字,保存为字符串; 3、 如果字符串长度大于 4 个中文字符,则取字符串最右边的 4 个中文字符,作 为候选词;否则取出整个字符串作为候选词; 4、 在词典中查找这个候选词,如果查找失败,则去掉这个候选词的最左字,重 复这步进行查找,直到候选词为 1 个中文字符; 5、 将候选词从字符串中取出、删除,回到第 3 步直到字符串为空; 6、 回到第 2 步直到语料已读完。
二、程序设计 查找算法:哈希表查找
除了分词结果的准确性,程序的性能也是至关重要的。由于本程序采用了词典法 来分词,执行过程需要检索大量数据,因此查找效率成为程序性能的决定性因素。 据我的了解,目前比较成熟的查找算法主要有顺序查找、 二分查找、 哈希表查找等。 顺序查找的算法复杂度为 O(n); 二分查找的算法复杂度为 O(logn),但需要事先排序; 哈希表查找的复杂度为 O(1)。 本程序采用效率最高的哈希表查找算法。
#include #include #include #include #include #include #include #include <iostream> <string> <fstream> <sstream> <ext/hash_map> <iomanip> <stdio.h> <time.h> // 最en("dict/number.txt.utf8"); if (!infile.is_open()) { cerr << "Unable to open input file: " << "wordlexicon" << " -- bailing out!" << endl; exit(-1); } while (getline(infile, strtmp)) // 读入词典的每一行并将其添加入哈希中 { istringstream istr(strtmp); istr >> word; //读入每行第一个词 numberhash.insert(sipair(word, 1)); //插入到哈希中 } infile.close(); infile.open("dict/unit.txt.utf8"); if (!infile.is_open()) { cerr << "Unable to open input file: " << "wordlexicon" << " -- bailing out!" << endl; exit(-1); } while (getline(infile, strtmp)) // 读入词典的每一行并将其添加入哈希中 { istringstream istr(strtmp); istr >> word; //读入每行第一个词 unithash.insert(sipair(word, 1)); //插入到哈希中 } infile.close(); } //删除语料库中已有的分词空格,由本程序重新分词 string eat_space(string s1) { int p1=0,p2=0; int count; string s2; while(p2 < s1.length()){ //删除全角空格 // if((s1[p2]-0xffffffe3)==0 && // s1[p2+1]-0xffffff80==0 && // s1[p2+2]-0xffffff80==0){//空格