中文姓名提取(玩具代码——准头太小,权当玩闹)


Python 官网https://www.python.org/




  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


等风来,不如追风去……



中文姓名提取
(玩具代码——准头太小,权当玩闹)




目 录


回首页


在这里插入图片描述
  基于这条评论,我“舍身”试炼了。
  我正好有收录百家姓,就以百家姓和“中文取名常用字”来做了一个玩具——“中文姓名提取”。


回首页


“玩具”目录结构
在这里插入图片描述
在这里插入图片描述


回首页


代码试炼(以“三国演义.txt”、“大奉打更人_19txt”两个文本“开涮”)

在这里插入图片描述
在这里插入图片描述


回首页


本练习完整源码

#!/sur/bin/nve python 
# coding: utf-8 

from re import findall # 从re模块加载findall方法。

'''

filename = 're_Chinese_name.py'

author = '梦幻精灵_cq'

time = '2022-06-29'

'''
from os import system 


class re_Chinese_name:
    ''' 从文本中提取中文姓名 '''

    
    def __init__(self):
        l = system('clear')  
        with open('data/firstnames_one_100.txt') as f:
            self.firstnames = f.read().strip().split(',')
        with open('data/firstnames_two_85.txt') as f:
            self.firstnames_two = f.read().strip().split(',')
            self.firstnames.extend(self.firstnames_two)
        with open('data/boy_names.txt') as f:
            self.names_chr = f.read()
        with open('data/girl_names.txt') as f:
            self.names_chr += f.read()
        self.names = "".join(self.names_chr.strip().split(','))
        #input(f"\n\n姓:{self.firstnames}\n名用字:{self.names_chr}")


    def get_names(self, text):
        ''' 提取姓名,text为待从中提取姓名的文本。'''
        names = []

        for firstname in self.firstnames:
            if firstname in text:
                re_s = f"{firstname}"r'\w{3}'
                #print(re_s) # 调试胜语句。
                names.extend(findall(re_s, text))
        print(' 正在整理提取的姓名…… '.center(39, '~'))
        names = self.isname(list(set(names)))
        return set(names)


    def isname(self, names_list):
        ''' 中文姓名判定 '''
        names = []
        n = self.names_chr
        for name in names_list:
            if name[:2] in self.firstnames_two:
                if name[2] in n and name[3] in n:
                    names.append(name)
                elif name[2] in n and name[3] not in n:
                    names.append(name[:-1])
            else:
                if name[1] in n and name[2] in n and name[3] in n:
                    names.append(name)
                elif name[1] in n and name[2] in n:
                    names.append(name[:3])
                elif name[1] in n:
                    names.append(name[:2])
        return names



if __name__ == '__main__':
    rn = re_Chinese_name()
    names = rn.get_names(open('data/三国演义.txt').read())
    names2 = rn.get_names(open('data/大奉打更人_19.txt').read())
    print(f"\n\n{u' re提取中文姓名 '.center(44, '~')}\n\n《三国演义》:\n{','.join(names)}\n\n《大奉打更人》第一十九章:\n{','.join(names2)}\n\n")

在这里插入图片描述


回首页

__上一篇:__ CSV文件格式——方便好用个头最小的数据传递方式

__下一篇:__ 

我的HOT博:
推荐条件 点阅破千

回目录


老齐漫画头像

精品文章:

来源:老齐教室


回目录

Python 入门指南【Python 3.6.3】

好文力荐:

CSDN实用技巧博文:


  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
中文信息计算机自动处理的研究已有几十年的 历史 , 但至今仍有许多技术难题没有得到很好解 决 , 中文姓名自动识别问题就是其中的一个。由于 它与中文文本的自动分词一样 , 属于中文信息处理 的基础研究领域 , 因而它的研究成果直接影响到中 文信息的深层次研究。汉语的自身特点使得中文信 息自动处理大多是先对要处理的文本进行自动分词 (加入显式分割符) , 然后再在分词的基础上进行词 法、语法、语义等方面的深入分析。而在分词阶 段 , 文本中的人名、地名以及其它专有名词和生词 大多被切分成单字词 , 在这种情形下如不能很好地 解决汉语文本中专有名词生词的识别问题 , 将给其 后的汉语文本的深入分析带来难以逾越的障碍。中 文姓名的自动识别问题就是在这种背景下提出来 的。对这一问题的研究目前采用的技术中主要利用 以下几方面的信息: 姓名用字的频率信息、上下文 信息[1 ,2 ] 、语料库统计信息[2 ] 、词性信息等[3 ] 。本 文的方法是 , 首先对中文人名的构成、姓名用字的 规律及上下文文本信息特征进行充分分析 , 在此基 础上建立起两组规则集 , 将其作用于测试文本 , 获 得初步识别结果 , 再利用大规模语料库的统计信息 对初步识别结果进行概率筛选 , 设定合适的阈值 , 输出最终识别结果。经对 50 多万字的开放语料测 试 , 系统自动识别出 1781 个中文人名 , 在不同的 筛选阈值下获得 90 %以上的识别准确率 , 而召回 率高于 91 %。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦幻精灵_cq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值