NLP从零开始------3.文本基础处理之语料库
人生百态,人生如梦 2024-10-04 14:01:02 阅读 80
1.语料库概述
语料库是为某一个或多个应用而专门收集的、有一定结构的、有代表性的、可以被计算机程序检索的、具有一定规模的语料的集合。
其实语料库的本质就是经过科学取样和加工的大规模电子文本库。对于语料库来说有三个显著特征:
1.语料库中存放的是真实出现过的语言材料。
2. 语料库是以计算机为载体,承载语言知识的基础资源。
3.语料库是对真实语料进行加工、分析和处理的资源。
任何一个信息处理系统都离不开语料库的支持,在nlp中更是如此。尽管语料库在不同的nlp系统中所起到的作用不同,但是却在不同层面上共同构成了各种nlp方法赖以实现的基础。
2.语料库常见用处
语料库包含的语言词汇、语法结构、语义和语用信息为语言学研究和NLP研究提供了大量的资料来源。以下是常见的运用领域:
1.语言研究:语料库为语言学研究提供了丰富的语言材料,在句法分析、词法分析、语言理论及语言史研究这些领域中都发挥了重要作用。
2.编纂工具参考书籍:一些对语言教学有重要影响的词典和语法书均是在语料库的基础上编写的。
3.语言教学:在语言教学中,语料库可以帮助减少课堂上学习的语言与实际使用的语言之间的差距,发现过去被忽略的语言规律,能够更准确地理解一些词语在实际交际中的意义和用法,发现学习者使用语言时的一些问题。
4. NLP:语料库按照一定的要求加工处理后可以应用到NLP的各个层面的研究中。语料库在词层面上进行分词、词性标注后,可以用于词法分析、拼写检查、全文检索、词频统计、名词短语的辩识和逐词机器翻译等。
3.语料库类型与构建原则
(1).语料库类型
语料库的类型是根据他的研究目的和用途划分的。
按照语料库结构划分:平衡结构语料库与自然随机结构语料库。
平衡结构语料库:平衡结构语料库的着重点是语料的代表性和平衡性,需要预先设计语料库中语料的类型,定义好每种类型语料所占的比例并按这种比例去采集组成语料库。
自然随机语料库:自然随机结构的语料库则是按照某个原则随机去收集组成语料。
按照语料库用途划分:通用语料库与专用语料库。
通用语料库:通用语料库与专用语料库是从不同的用途角度上看问题得来的结果,其中不做特殊限定。
专用语料库:专用语料库的选材可以只限于某一领域,为了某种专门的目的而采集。只采集某一特定领域、特定地区、特定时间、特定类型的语料所构成的语料库即为专用语料库。
按照语料选取时间划分:共时语料库与历时语料库。
共时语料库:共时语料库是为了对语言进行共时研究而建立的语料库,即无论所采集语料的时间段有多长,只要研究的是一个时间平面上的元素或元素的关系,具有共时性,则是共时研究。 历时语料库:历时语料库是为了对语言进行历时研究而建立的语料库,即研究一个历时切面中元素与元素关系的演化。根据历时语料库得到的统计结果是依据时间轴的等距离抽样得到的若干频次变化形成的走势图。
除了上述三种划分方式还有很多种划分方式,比如按语种划分,按媒介划分,按地域划分等等,不一一列举。
(2)语料库构建原则
一般来说要保证语料库构建有以下4个特征:
1.代表性:语料库应尽可能广泛地覆盖真实语言现象和特征。这意味着样本语料应该包括各种语言使用场景,如日常对话、专业文献、网络文本等,以确保语言模型能够学习和理解语言的多样性。
2. 结构性:收集的语料必须是计算机可读的电子文本形式的语料集合。语料集合结构包括语料库中语料记录的代码,元数据项、数据类型、数据宽度、取值范围、完整性约束。
3.平衡性:语料库应平衡不同内容或指标。例如以下这些例子:
确保语料库包含不同领域和主题的文本,例如科学、艺术、政治、体育等.
包括不同写作风格,如正式、非正式、口语、书面语等。
语料应来自不同的作者、出版物和媒体,以避免单一来源的偏见。
包括不同时间段的语言使用,以反映语言随时间的演变。
4. 规模性:语料库的规模对于语言研究和自然语言处理研究至关重要。大规模的语料库可以提供更多的数据点,有助于提高模型的泛化能力。然而,随着规模的增大,也可能出现“统计垃圾”问题,即大量无关或低质量的数据可能会影响分析的准确性。因此,应根据研究的具体需求来确定语料库的规模,并且在使用过程中进行适当的筛选和清洗,以去除垃圾语料.
4.NLTK库
(1).NLTK库介绍
NLTK库是一个强大的开源库,专为自然语言处理设计。它提供了简洁直观的接口,用于处理文本和语音数据,覆盖了广泛的自然语言处理任务。这些任务包括但不限于:分词、词性标注、命名实体识别、词干提取、词形还原、语义分析、文本分类、机器翻译、文本生成、对话系统构建、语音识别以及文本挖掘等。
NLTK常见模块与功能
(2).NlTK库安装
有前人经验,也可以按照我的做:
NLTK数据包快速安装_nltk安装-CSDN博客
首先启动之前所说的conda虚拟环境:
打开anaconda powershell,输入以下代码启动虚拟环境
<code>conda activate nlp
然后安装nltk库
conda install nltk
然后检查是否存在nltk库
conda list
然后出现了两种不同的方式安装nltk数据包
方法一(虽然官方,但是不推荐,报错高达百分之九十九):
打开pycharm,打开一个python文件输入以下代码:
import nltk
nltk.download()
运行后出现下图:
修改路径到你的conda包下,最后名称还是nltk_gata
方法二:
可以看这篇文章:
手把手教你十分钟用PyCharm安装好nltk_pycharm nltk-CSDN博客
(3)语料库获取
除了自己搭建语料库外,还有许多已经搭建好的语料库可以直接使用。nltk就集成了多个语料库。
在nltk库中定义了许多基本的语料库函数或方法。
fileids() | 获取语料库中文字 | fileids([categories]) | 分类对应语料库中文件 |
categories() | 语料库中的分类 | categories([fileids]) | 文件对应语料库中分类 |
raw() | 语料库的原始内容 | raw(fileids=[f1,f2,f3]) | 指定文件的原始内容 |
raw(categories=[c1,c2])
| 指定分类的原始内容 | words() | 查找整个语料库中词汇 |
words(fileids=[f1,f2,f3]) | 指定文件中词汇 | words(categories=[c1,c2]) | 指定分类中词汇 |
sents() | 查找整个语料库中句子 | sents(fileids=[f1,f2,f3]) | 指定文件中句子 |
sents(categories=[c1,c2]) | 指定分类中句子 | abspath(fileid) | 指定文件在磁盘位置 |
encoding(fileid) | 文件编码 | open(fileid) | 打开指定语料库文件的文件流 |
root() | 到本地安装的语料库根目录路径 | readme() | 语料库中readme文件的内容 |
代码训练:
1.获取网络如料库文本文件
<code>import nltk
fileids = nltk.corpus.webtext.fileids()#获取网络语料库的所有文本文件
print(fileids)
结果如下:
D:\ana\envs\nlp\python.exe D:\pythoncode\nlp\main.py
['firefox.txt', 'grail.txt', 'overheard.txt', 'pirates.txt', 'singles.txt', 'wine.txt']
进程已结束,退出代码为 0
2.查找一个文本文件并统计词数:
import nltk
words=nltk.corpus.webtext.words('firefox.txt')#打开网络语料库的文本文件
print(words)
print(len(words))#统计词数
结果如下:
D:\ana\envs\nlp\python.exe D:\pythoncode\nlp\main.py
['Cookie', 'Manager', ':', '"', 'Don', "'", 't', ...]
102457
进程已结束,退出代码为 0
3.索引文本
import nltk
words=nltk.corpus.webtext.words('firefox.txt')
emma=nltk.Text(words)
emma.concordance('opposite')#展现全文oppsite位置和上下文
结果:
D:\ana\envs\nlp\python.exe D:\pythoncode\nlp\main.py
Displaying 2 of 2 matches:
and then scrolling the wheel in an opposite direction does not cancel original
- wheel magnification direction is opposite of normal convention Menu bars on
进程已结束,退出代码为 0
4.获取网络语料库中文本文件的统计信息
from nltk.corpus import webtext # 加载NLTK的网络语料库模块
# 遍历webtext语料库中的所有文件
for fileid in webtext.fileids():
raw = webtext.raw(fileid) # 获取文件的原始文本内容
num_chars = len(raw) # 计算文本中的字符数
words = webtext.words(fileid) # 获取文件中的单词列表
num_words = len(words) # 计算单词数
sents = webtext.sents(fileid) # 获取文件中的句子列表
num_sents = len(sents) # 计算句子数
vocab = set([w.lower() for w in words]) # 将单词列表中的所有单词转换为小写,并创建一个单词集合
print('%d %d %d %s' % (num_chars, num_words, num_sents, fileid)) # 打印字符数、单词数、句子数和文件标识符
结果如下:
D:\ana\envs\nlp\python.exe D:\pythoncode\nlp\main.py
564601 102457 1144 firefox.txt
65003 16967 1881 grail.txt
830118 218413 17939 overheard.txt
95368 22679 1469 pirates.txt
21302 4867 316 singles.txt
149772 31350 2984 wine.txt
进程已结束,退出代码为 0
5.demo:思考
思考1:如何构建一个影视作品语料库
思考2: 如何读取本地新闻并分析
思考2数据集
先天性心脏病“几岁可根治,十几岁变难治,几十岁成不治”,中国著名心血管学术领袖胡大一今天在此间表示救治心脏病应从儿童抓起,他呼吁社会各界关心贫困地区的先天性心脏病儿童。
据了解,今年五月一日到五月三日,胡大一及其“爱心工程”专家组将联合北京军区总医院在安徽太和县举办第三届先心病义诊活动。
安徽太和县是国家重点贫困县,同时又是先天性心脏病的高发区。由于受贫苦地区医疗技术条件限制,当地很多孩子由于就医太晚而失去了治疗时机,当地群众也因此陷入“生病—贫困—无力医治—病情加重—更加贫困”的恶性循环中。
胡大一表示,由于中国经济发展的不平衡与医疗水平的严重差异化,目前中国有这种情况的绝不止一个太和县。但按照现行医疗体制,目前医院、医生为社会提供的服务模式和力度都远远不能适应社会需求。他希望,发达地区的医院、医生能积极走出来,到患者需要的地方去。
据悉,胡大一于二00二发起了面向全国先天性心脏病儿童的“胡大一爱心工程”,旨在呼吁社会对于先心病儿童的关注,同时通过组织大城市专家走进贫困地区开展义诊活动,对贫困地区贫困家庭优先实施免费手术,并对其他先心病儿童给予适当资助。 (钟啸灵)
专家简介:
胡大一、男、1946年7月生于河南开封,主任医师、教授、博士生导师,国家突出贡献专家、享受政府专家津贴。现任同济大学医学院院长、首都医科大学心脏病学系主任、北京大学人民医院心研所所长、心内科主任,首都医科大学心血管疾病研究所所长,首都医科大学北京同仁医院心血管疾病诊疗中心主任。
任中华医学会心血管病分会副主任委员、中华医学会北京心血管病分会主任委员、中国生物医学工程学会心脏起搏与电生理分会主任委员、中国医师学会循证医学专业委员会主任委员、北京市健康协会理事长、北京医师协会副会长及美国心脏病学院会员。(来源:北大人民医院网站)
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。