Python数据分析:使用爬虫从网页、社交媒体平台、论坛等公开资源提取中文和英文人名。

目录

  • [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编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法[1](#甘特图的mermaid语法1) 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

++ 功能快捷键

撤销: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. 项目1
  2. 项目2
  3. 项目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文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,

继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

*[HTML]: 超文本标记语言

相关推荐
雨夜的星光2 小时前
Python环境管理工具全景对比:Virtualenv, Pipenv, Poetry 与 Conda
python·pycharm·conda·virtualenv
沐知全栈开发2 小时前
并查集基础
开发语言
2401_841495642 小时前
【数据结构】链栈的基本操作
java·数据结构·c++·python·算法·链表·链栈
省四收割者2 小时前
Go语言入门(22)-goroutine
开发语言·vscode·后端·golang
Archie_IT2 小时前
「深入浅出」嵌入式八股文—P2 内存篇
c语言·开发语言·数据结构·数据库·c++·算法
未来之窗软件服务3 小时前
从东方仙盟筑基期看 JavaScript 动态生成图片技术-东方仙盟
开发语言·javascript·仙盟创梦ide·东方仙盟·图片技术
猫头虎3 小时前
如何解决 pip install -r requirements.txt 本地轮子路径 ‘./packages/xxx.whl’ 不存在 问题
开发语言·网络·python·r语言·pip·gpu算力·国产
qq_402605653 小时前
python爬虫(三) ---- 分页抓取数据
开发语言·爬虫·python
唐叔在学习3 小时前
Pywebview:Web技术构建桌面应用的最佳选择
后端·python·webview