首页 > Python资料 博客日记

使用 Python 和 jieba 实现中文文本中的人名和公司名提取

2024-10-16 01:00:05Python资料围观39

这篇文章介绍了使用 Python 和 jieba 实现中文文本中的人名和公司名提取,分享给大家做个参考,收藏Python资料网收获更多编程知识

在处理中文文本时,经常需要从中提取出人名和公司名称。比如在文本分析、信息提取和自然语言处理(NLP)等领域,这些任务都非常常见。本文将介绍如何使用wxPython创建一个简单的桌面应用程序,从一段中文长文中提取人名和公司名称,并用jieba库进行分词和命名实体识别(NER)。
C:\pythoncode\new\markname.py

环境准备

在开始之前,确保你已经安装了wxPythonjieba库。如果没有,请使用以下命令进行安装:

pip install wxPython jieba
项目需求分析

我们将创建一个带有以下功能的桌面应用程序:

  1. 一个多行文本输入框,用于输入需要处理的长文。
  2. 一个按钮,用于触发文本处理。
  3. 一个多行文本输出框,用于显示提取出的人名和公司名称。
实现步骤

我们将使用wxPython创建GUI,jieba库进行中文分词和命名实体识别。

完整代码示例

以下是实现这一功能的完整代码示例:

import wx
import jieba
import jieba.posseg as pseg

class ChineseNameCompanyExtractorFrame(wx.Frame):
    def __init__(self, *args, **kw):
        super(ChineseNameCompanyExtractorFrame, self).__init__(*args, **kw)

        self.panel = wx.Panel(self)

        # Input text box (multiline)
        self.text_ctrl_input = wx.TextCtrl(self.panel, style=wx.TE_MULTILINE, size=(400, 200))
        
        # Output text box (multiline)
        self.text_ctrl_output = wx.TextCtrl(self.panel, style=wx.TE_MULTILINE | wx.TE_READONLY, size=(400, 100))

        # Button to trigger extraction
        self.extract_button = wx.Button(self.panel, label="提取人名和公司名称")
        self.extract_button.Bind(wx.EVT_BUTTON, self.on_extract_names_and_companies)

        # Layout
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(wx.StaticText(self.panel, label="输入文本:"), flag=wx.LEFT | wx.TOP, border=10)
        sizer.Add(self.text_ctrl_input, proportion=1, flag=wx.EXPAND | wx.ALL, border=10)
        sizer.Add(self.extract_button, flag=wx.ALIGN_CENTER | wx.ALL, border=10)
        sizer.Add(wx.StaticText(self.panel, label="提取的人名和公司名称:"), flag=wx.LEFT | wx.TOP, border=10)
        sizer.Add(self.text_ctrl_output, proportion=0, flag=wx.EXPAND | wx.ALL, border=10)
        self.panel.SetSizer(sizer)

        self.SetTitle('中文人名和公司名称提取器')
        self.SetSize((500, 400))
        self.Centre()

    def on_extract_names_and_companies(self, event):
        # Get the current text from the input text control
        text = self.text_ctrl_input.GetValue()

        # Extract names and companies using jieba
        names = []
        companies = []
        words = pseg.cut(text)
        for word, flag in words:
            if flag == 'nr':  # 人名
                names.append(word)
            elif flag == 'nt':  # 机构团体名,一般表示公司
                companies.append(word)

        # Combine names and companies, and remove duplicates
        all_entities = sorted(set(names + companies))

        # Display the results in the output text control
        self.text_ctrl_output.SetValue(', '.join(all_entities))

class MyApp(wx.App):
    def OnInit(self):
        frame = ChineseNameCompanyExtractorFrame(None)
        frame.Show(True)
        return True

if __name__ == "__main__":
    app = MyApp(False)
    app.MainLoop()
代码详解
  1. 初始化 ChineseNameCompanyExtractorFrame

    • 创建一个面板 (wx.Panel)。
    • 创建一个多行文本输入框 (wx.TextCtrl)。
    • 创建一个多行只读文本输出框 (wx.TextCtrl)。
    • 创建一个按钮,并将按钮的点击事件绑定到 on_extract_names_and_companies 方法。
    • 使用垂直盒子布局 (wx.BoxSizer) 布局文本框和按钮。
  2. on_extract_names_and_companies 方法

    • 获取当前输入框中的文本。
    • 使用jieba进行分词和词性标注:
      • nr表示人名。
      • nt表示机构团体名(一般表示公司)。
    • 合并提取到的人名和公司名字,并去重。
    • 将结果显示在只读文本输出框中。
  3. MyApp

    • 初始化应用程序并显示框架。
运行效果

将上述代码保存为一个Python文件(例如 name_company_extractor.py),然后运行它。你将看到一个包含输入框和按钮的窗口。输入一段包含中文人名和公司名称的文本,点击“提取人名和公司名称”按钮,提取到的人名和公司名称将显示在下方的只读文本框中。

总结

本文介绍了如何使用wxPythonjieba库创建一个简单的桌面应用程序,用于从一段中文长文中提取人名和公司名称。通过这种方法,我们可以高效地处理中文文本中的信息提取任务。希望本文对你有所帮助,欢迎留言讨论或提出问题!


版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐