Python 官网:https://www.python.org/
??自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。 ????????????—— 华罗庚
中文姓名提取
(玩具代码——准头太小,权当玩闹)
目?录
回首页
??基于这条评论,我“舍身”试炼了。 ??我正好有收录百家姓,就以百家姓和“中文取名常用字”来做了一个玩具——“中文姓名提取”。
回首页
“玩具”目录结构
回首页
代码试炼(以“三国演义.txt”、“大奉打更人_19txt”两个文本“开涮”)
回首页
本练习完整源码
from re import 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(','))
def get_names(self, text):
''' 提取姓名,text为待从中提取姓名的文本。'''
names = []
for firstname in self.firstnames:
if firstname in text:
re_s = f"{firstname}"r'\w{3}'
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博:
推荐条件
点阅破千
回目录
精品文章:
来源:老齐教室
回目录
好文力荐:
CSDN实用技巧博文:
|