社保领域知识图谱构建练手小实验(1)——数据预处理

练手数据

使用先前做养老服务文献计量相关实验时为CiteSpace所下载的结构化的数据,原始数据为纯文本。
(原始数据可以通过下面的链接自取,其中包含1762篇文献的结构化数据。)
链接:https://pan.baidu.com/s/1IzP5VLAlz3h82kD0BZXU5Q
提取码:ywbx
复制这段内容后打开百度网盘手机App,操作更方便哦

数据预处理

1、用Python编程提取出其中的摘要部分。

"""
抽取出download_9920.txt文件中所有文献的摘要部分
并按行显示在文件data_9920_abstract.txt中
"""

fi = open("D:/textAnalysis/project/knowledgeMapping/download_9920.txt","r",encoding="utf-8")
fo = open("D:/textAnalysis/project/knowledgeMapping/data_9920_abstract.txt","w",encoding="utf-8")

wflag =False                #写标记
newline = []                #创建一个新的列表

for line in fi :            #按行读入文件,此时line的type是str
    if "AB" not in line:
        wflag = False
    if "AB" in line:     #检验是否到了要写入的内容
        wflag = True
    if wflag == True:
        K = list(line)
        for i in K :       #写入需要内容
            newline.append(i)

strlist = "".join(newline)      #合并列表元素
newlines = str(strlist)         #list转化成str

fo.write(newlines)

fo.close()
fi.close()
#-*-coding:utf-8-*-
#删除前面AB 的部分
import re
f=open("D:/textAnalysis/project/knowledgeGraph/keyWords/yiyangronghe_abstract.txt",'r',encoding='UTF-8')
alllines=f.readlines()
f.close()

f=open("D:/textAnalysis/project/knowledgeGraph/keyWords/yiyangronghe_abstract.txt",'w+',encoding='UTF-8')

for eachline in alllines:
    a=re.sub('AB ','',eachline)
    f.writelines(a)
f.close()

2、观察数据,使用word将<正>进行替换操作。(之前脑子完全秀逗了,还特意编写一个脚本将AB删除,明明可以直接使用word进行替换)

下面3、4步具体操作借鉴论文《社保领域知识图谱构建及应用研究_李佳恒》

3、去除噪声
结合自己数据质量情况:
对文本中的英文单词全部换为小写,去除标点、空格和乱码字符。

4、分词和词性标注
在上述论文中,分词和词性标注使用的是hanlp,但是我在自己的环境中始终安装不上。
接着我查阅文献《命名实体识别在中药名词和方剂名词识别中的比较研究_龚德山》。
社保领域知识图谱构建练手小实验(1)——数据预处理_第1张图片
先尝试一下结巴分词和词性标注——

# encoding: UTF-8

import re
import jieba
import jieba.posseg as pseg

# make Chinese text clean
def clean_zh_text(text):
    # keep English, digital and Chinese(同时不更改文章原意)
    comp = re.compile('[^A-Z^a-z^0-9^\u4e00-\u9fa5^%^.^×]')
    #[^] 匹配任意一个不在中括号里的字符
    return comp.sub('', text)
    #用空替换掉匹配中返回的值

#将文本中可能存在的英文单词全部换成小写
def word_to_lower(text):
    return text.lower()

if __name__ == '__main__':

    #函数功能测试
    #text_en = '$How old are you? Could you give me your pen?'
    #text_zh = '尺寸:宽69mm×高118mm×厚14mm材质'
    #print(word_to_lower(text_en))
    #print(clean_zh_text(text_zh))

    with open('D:/textAnalysis/project/KnowledgeGraph/data/data_9920_abstract.txt',"r",encoding='utf-8') as f:
        str = f.read()
    #print(str)

    #数据预处理
    str = clean_zh_text(str)
    str = word_to_lower(str)
    with open('D:/textAnalysis/project/KnowledgeGraph/data/data_9920_abstract_pre.txt',"w",encoding='utf-8') as f:
        f.write(str)

    #结巴分词与词性标注
    with open('D:/textAnalysis/project/KnowledgeGraph/data/data_9920_abstract_pre.txt',"r",encoding='utf-8') as f:
        str2 = f.read()
    #seg_list = jieba.cut(str2)# 默认以精确模式分词
    # 检查输出结果时对错误的调试链接https://blog.csdn.net/YJG7D314/article/details/102787844
    #jieba.enable_paddle() #启动paddle模式。 0.40版之后开始支持,早期版本不支持
    words = list(pseg.cut(str2))#pseg返回的是generator,含有pair
    str3 = (''.join('%s' %id for id in words))
    #TypeError: sequence item 0: expected str instance, pair found
    # 纠错链接https://blog.csdn.net/laochu250/article/details/67649210
    #print(words)
    #for word, flag in words:
    #    print('%s %s' % (word, flag))
    with open('D:/textAnalysis/project/KnowledgeGraph/data/data_9920_abstract_posseg.txt',"w",encoding='utf-8') as f:
        f.write(str3)

一些补充说明:
社保领域知识图谱构建练手小实验(1)——数据预处理_第2张图片
参考链接:
https://github.com/fxsjy/jieba

你可能感兴趣的:(python,自然语言处理,数据清洗)