Python结合jieba库实现中文文本中的人名和公司名精准提取

在处理中文文本时,经常需要从中提取出人名和公司名称。比如在文本分析、信息提取和自然语言处理(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

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

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

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

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

总结

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

作者:winfredzhang

物联沃分享整理
物联沃-IOTWORD物联网 » Python结合jieba库实现中文文本中的人名和公司名精准提取

发表回复