一、实验目的:

1.掌握中文分词工具包的使用。

2.掌握基于LTP的词性标注的使用。

3.掌握基于LTP的命名实体识别的使用。

二、实验设备及分组:

1. PC机或笔记本电脑若干;

2. Window 7及以上版本操作系统;

3. Python 运行环境;

4.安装和配置Anaconda。

三、实验任务及要求

文章素材:庐山,位于江西省九江市南,雄峙于长江之滨、鄱阳湖畔,东距鄱阳湖长岭-屏峰卡口7千米,是一座变质岩断石山,其拔地而起,主峰大汉阳峰高程1474米。庐山不仅风景秀丽,而且文化内涵深厚,更集教育名山、文化名山、宗教名山、政治名山于一身。从司马迁“南登庐山”,到陶渊明、李白、白居易、苏轼、王安石、黄庭坚、陆游、朱熹、康有为、胡适、郭沫若等文坛巨匠或陈运和等诗文名家1500余位登临庐山,留下4000余首诗词歌赋。1996年,庐山被联合国教科文组织确定为世界文化遗产,列入《世界遗产名录》。

1.对给定的上述文章素材进行分词。

2.基于文章素材得到的分词结果,进行词性标注,查看标注结果。

3.基于文章素材得到的分词结果,进行命名实体识别,查看识别结果。

4.根据得到的识别结果,提取识别结果中的人名,地名,组织机构名。

四、实验过程及实验步骤:(手写完成:要求写出实验步骤,要求书写规范,字迹切勿潦草。)

1.对给定的上述文章素材进行分词。

注意文件的位置记得换(否则编译会出错)

from pyltp  import Segmentor,SentenceSplitter,Postagger,NamedEntityRecognizer
#中文分词
#加载分词模型
seg= Segmentor("D:\\python_data\\ltp_data_v3.4.0\\ltp_data_v3.4.0\\cws.model")
#加载词性模型
pos=Postagger("D:\\python_data\\ltp_data_v3.4.0\\ltp_data_v3.4.0\\pos.model") 
#加载命名实体识别模型
ner=NamedEntityRecognizer("D:\\python_data\\ltp_data_v3.4.0\\ltp_data_v3.4.0\\ner.model") 
text='庐山,位于江西省九江市南,雄峙于长江之滨、鄱阳湖畔,东距鄱阳湖长岭-屏峰卡口7千米,是一座变质岩断石山,其拔地而起,主峰大汉阳峰高程1474米。庐山不仅风景秀丽,而且文化内涵深厚,更集教育名山、文化名山、宗教名山、政治名山于一身。从司马迁“南登庐山”,到陶渊明、李白、白居易、苏轼、王安石、黄庭坚、陆游、朱熹、康有为、胡适、郭沫若等文坛巨匠或陈运和等诗文名家1500余位登临庐山,留下4000余首诗词歌赋。1996年,庐山被联合国教科文组织确定为世界文化遗产,列入《世界遗产名录》。'

words = seg.segment(text)  #分词
for word in words:
    print(word,end='\\')

2.基于文章素材得到的分词结果,进行词性标注,查看标注结果。

postags=pos.postag(words)
for word,postag in zip(words,postags):
    print(word,postag,end='\\')

3.基于文章素材得到的分词结果,进行命名实体识别,查看识别结果。

netags=ner.recognize(words,postags)
for word2,netag in zip(words,netags):
print(word2,netag,end='\\')

4.根据得到的识别结果,提取识别结果中的人名,地名,组织机构名。

names=set()
i=0
for tag,word in zip(netags,words):
    j=i
    if "Nh" in tag:
        if tag.startswith("S"):
            names.add(word)
        elif tag.startswith("B"):
            name=word
            while netags[j]!='E-Nh':
                j+=1
                name+=words[j]
            names.add(name)
    i+=1
print(names)

#提取识别到的地名
places=set()
i=0
for tag,word in zip(netags,words):
    j=i
    if "Ns" in tag:
        if tag.startswith("S"):
            places.add(word)
        elif tag.startswith("B"):
            place=word
            while netags[j]!='E-Ns':
                j+=1
                place+=words[j]
            places.add(place)
    i+=1
print(places)

#提取识别到的组织机构名
organizations=set()
i=0
for tag,word in zip(netags,words):
    j=i
    if "Ni" in tag:
        if tag.startswith("S"):
            organizations.add(word)
        elif tag.startswith("B"):
            organization=word
            while netags[j]!='E-Ni':
                j+=1
                organization+=words[j]
            organizations.add(organization)
    i+=1
print(organizations)

       

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐