目录
- [1 代码示例](#1 代码示例)
- [2 正则表达式局限](#2 正则表达式局限)
- [2.1 误匹配问题](#2.1 误匹配问题)
- [2.2 漏匹配问题](#2.2 漏匹配问题)
- [2.3 性能问题](#2.3 性能问题)
- [3 更高效解决方案](#3 更高效解决方案)
- [3.1 词典匹配法](#3.1 词典匹配法)
- [3.2 机器学习模型(高精度)](#3.2 机器学习模型(高精度))
- [3.3 混合方法(正则+规则)](#3.3 混合方法(正则+规则))
- [4 完整实战建议](#4 完整实战建议)
- [5 欢迎纠错](#5 欢迎纠错)
- [6 免费爬虫](#6 免费爬虫)
- [7 论文写作/Python 学习智能体](#7 论文写作/Python 学习智能体)
1 代码示例
直接上代码。
python
import re
import requests
from bs4 import BeautifulSoup
import pytesseract
from PIL import Image
import pandas as pd
# 示例1:从网页中提取中文和英文人名
def extract_names_from_web(url):
try:
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get(url, headers=headers, timeout=10)
soup = BeautifulSoup(response.text, 'html.parser')
text = soup.get_text()
# 中文人名正则(简化版,匹配2-4个中文字)
chinese_names = re.findall(r'[\u4e00-\u9fa5]{2,4}', text)
# 英文人名正则(首字母大写的连续单词)
english_names = re.findall(r'([A-Z][a-z]+(?:\s[A-Z][a-z]+){0,2})', text)
return list(set(chinese_names + english_names)) # 去重
except Exception as e:
print(f"网页抓取错误: {e}")
return []
# 示例2:从图像中OCR识别文本并提取人名(中英文)
def extract_names_from_image(image_path):
try:
# 使用Tesseract OCR识别文本
text = pytesseract.image_to_string(Image.open(image_path),
lang='chi_sim+eng')
# 中英文人名提取
chinese_names = re.findall(r'[\u4e00-\u9fa5]{2,4}', text)
english_names = re.findall(r'([A-Z][a-z]+(?:\s[A-Z][a-z]+){0,2})', text)
return list(set(chinese_names + english_names))
except Exception as e:
print(f"OCR处理错误: {e}")
return []
# 示例3:数据清洗和规范化
def clean_and_normalize_names(name_list):
cleaned = []
for name in name_list:
# 去除前后空格和特殊字符
name = re.sub(r'[^\w\s\u4e00-\u9fa5]', '', name).strip()
# 中文去除非人名常用字(示例)
if re.match(r'^[\u4e00-\u9fa5]+$', name):
if len(name) < 2 or len(name) > 4: # 简单长度过滤
continue
if name in ['中国', '公司', '日期']: # 过滤常见非人名
continue
# 英文姓名格式规范化(首字母大写)
elif re.match(r'^[A-Za-z\s]+$', name):
name = ' '.join([part.capitalize() for part in name.split()])
cleaned.append(name)
# 最终去重
return list(set(cleaned))
# 使用示例
if __name__ == "__main__":
# 从网页抓取
web_names = extract_names_from_web('https://example.com/news')
# 从本地图像识别(需要安装Tesseract)
# image_names = extract_names_from_image('ancient_names.jpg')
# 数据清洗
cleaned_names = clean_and_normalize_names(web_names) # + image_names
# 保存结果
df = pd.DataFrame(cleaned_names, columns=['Name'])
df.to_csv('extracted_names.csv', index=False, encoding='utf-8-sig')
print(f"已提取并保存 {len(df)} 条人名数据")
代码说明:
1.网页抓取:使用requests和BeautifulSoup获取网页内容,通过正则表达式匹配中英文人名。
2.图像OCR:使用pytesseract库识别图像中的文本(需先安装Tesseract OCR引擎)。
3.数据清洗:
(1)去除特殊字符和前后空格。
(2)中文人名长度过滤(2-4字)。
(3)英文人名首字母大写规范化。
4.结果保存:使用pandas将数据保存为CSV文件。
注意事项:
1.实际应用中需遵守网站的robots.txt协议。
2.中文人名识别可能需要更复杂的规则或机器学习模型。示例中的正则显然太"儿戏"了,有时间另开贴讨论、测试。
3.对于社交媒体API(如Twitter),需要使用官方API而非直接爬取。
4.古代人名可能需要特定字典或规则(如添加常见古字识别)。
2 正则表达式局限
2.1 误匹配问题
简单正则(如[\u4e00-\u9fa5]{2,4})会误抓:
re.findall(r'[\u4e00-\u9fa5]{2,4}', "中国银行宣布马云参加会议")
#输出:['中国银行', '宣布', '马云', '参加', '会议'](含大量非人名)
且无法区分人名与普通词汇(如"北京"、"公司")。
2.2 漏匹配问题
无法处理复姓(如"欧阳"、"司马")或少数民族人名(如"迪丽热巴")。
无法识别带符号的人名(如"·"分隔的维吾尔族名"买买提·艾力")。
2.3 性能问题
复杂正则(如排除非人名常用词)会显著降低效率。
3 更高效解决方案
3.1 词典匹配法
python
# 姓氏库(示例)
common_surnames = {'王', '李', '张', '刘', '陈', '杨', '欧阳', '司马'}
# 人名常用字库(需实际扩充)
common_name_chars = {'伟', '芳', '强', '秀英', '娜', '磊', '敏'}
def is_chinese_name(text):
# 检查是否复姓(如"欧阳修")
if text[:2] in common_surnames and len(text) <= 4:
return True
# 检查单姓+名(如"张三")
elif text[0] in common_surnames and any(c in common_name_chars for c in text[1:]):
return True
return False
# 使用示例
text = "王伟和李娜去了北京"
names = [word for word in re.findall(r'[\u4e00-\u9fa5]{2,4}', text) if is_chinese_name(word)]
print(names) # 输出:['王伟', '李娜']
3.2 机器学习模型(高精度)
python
import jieba
jieba.load_userdict("custom_names.txt") # 加载自定义人名词典
text = "马云和马斯克讨论了人工智能"
words = jieba.lcut(text)
print(words) # 输出:['马云', '和', '马斯克', '讨论', '了', '人工智能']
工具推荐:
jieba分词 + 自定义词典:加载人名常用词库。
LTP(哈工大语言技术平台):支持人名实体识别(NER)。
BERT-CRF:训练自定义人名识别模型(需标注数据)。
3.3 混合方法(正则+规则)
python
def extract_names(text):
# 排除常见非人名词汇
stop_words = {'中国', '公司', '今天', '日期'}
candidates = re.findall(r'[\u4e00-\u9fa5]{2,4}', text)
return [
name for name in candidates
if (name not in stop_words)
and (name[0] in common_surnames)
]
4 完整实战建议
数据预处理:
使用正则初步提取候选词(如[\u4e00-\u9fa5]{2,4})。
过滤优化:
姓氏过滤:优先匹配常见姓氏(覆盖99%中文人名)。
常用字过滤:排除"的"、"是"、"年"等非人名字。
后处理:
结合上下文规则(如"先生"、"女士"等前缀)。
人工校验高频结果,迭代优化规则。
小结:
优先选择词典匹配法(姓氏库+常用字库),兼顾效率和准确性。
对精度要求极高的场景(如法律文本),使用BERT-NER模型。
正则表达式仅适合初步筛选,需配合其他方法使用。
5 欢迎纠错
欢迎纠错,随时更新。
联系方式:评论、私信,或 企鹅 :179 0042 182 。
码字不易,如觉得还可以,请给个免费的 zan 和 soucang ,让我有动力继续写下去。
6 免费爬虫
https://affiliate
.bazhuayu
.com
/M8lKUC
7 论文写作/Python 学习智能体
https://chatglm.cn/share/WF2C5ree
- 以下关于 Markdown 编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
++ 新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法[1](#甘特图的mermaid语法1) 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
++ 功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G
++ 合理的创建标题,有助于目录的生成
直接输入1次+,并按下space后,将生成1级标题。
输入2次+,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
++ 如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
++ 插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
++ 如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
javascript
// An highlighted block
var foo = 'bar';
++ 生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
++ 创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
+++ 设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
+++ SmartyPants
SmartyPants将ASCII标点字符转换为"智能"印刷标点HTML实体。例如:
TYPE | ASCII | |
---|---|---|
Single backticks | 'Isn't this fun?' |
'Isn't this fun?' |
Quotes | "Isn't this fun?" |
"Isn't this fun?" |
Dashes | -- is en-dash, --- is em-dash |
-- is en-dash, --- is em-dash |
++ 创建一个自定义列表
Markdown
: Text-to- conversion tool
:
John
:
Luke
++ 如何创建一个注脚
一个具有注脚的文本。[2](#2)
++ 注释也是必不可少的
Markdown将文本转换为 。
++ KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
++ 新的甘特图功能,丰富你的文章
2014-01-07 2014-01-09 2014-01-11 2014-01-13 2014-01-15 2014-01-17 2014-01-19 2014-01-21 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
- 关于 甘特图 语法,参考 这儿,
++ UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五
这将产生一个流程图。:
链接 长方形 圆 圆角长方形 菱形
- 关于 Mermaid 语法,参考 这儿,
++ FLowchart流程图
我们依旧会支持flowchart的流程图:
Created with Raphaël 2.3.0 开始 我的操作 确认? 结束 yes no
- 关于 Flowchart流程图 语法,参考 这儿.
++ 导出与导入
+++ 导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
+++ 导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
-
注脚的解释 ↩︎
*[HTML]: 超文本标记语言