开发“智能会议纪要生成助手”——基于Python的本地语音识别与信息提取实践



背景介绍

在现代办公环境中,会议是信息传递和决策制定的重要方式。然而,传统的会议记录方式往往效率低下,容易遗漏关键信息。随着人工智能技术的发展,利用语音识别和自然语言处理(NLP)技术,可以实现会议内容的自动转录与结构化整理,极大提升工作效率。

本文将围绕“智能会议纪要生成助手”这一项目,介绍如何使用Python开发一个本地运行的桌面小工具,实现语音输入、文字转录、关键信息提取和结构化输出。该项目适合中级以下开发者在1~3天内完成,具备较高的学习价值。


思路分析

本项目的核心功能包括以下几个模块:

  1. 语音识别:使用Python的SpeechRecognition库,实现麦克风输入的语音转文字。
  2. 信息提取:通过正则表达式或简单的NLP逻辑,提取会议中的关键信息,如时间、负责人、任务、决议等。
  3. 结构化输出:将提取的信息整理为结构化的文本格式(如TXT或Markdown),并支持导出。

项目不依赖网络服务,所有功能均在本地运行,适合办公场景使用。


代码实现

以下是一个基于Python的完整实现代码,包含语音识别、信息提取和结构化输出功能。

1. 安装依赖

首先,安装所需的Python库:

pip install SpeechRecognition pydub

注意:pydub需要安装ffmpeg,请确保系统中已安装ffmpeg,或通过pip install ffmpeg-python进行安装。


2. 完整代码实现

import speech_recognition as sr
import re
from datetime import datetime

def record_audio(duration=5):
    """录制音频,持续时间为duration秒"""
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("请开始说话...")
        audio = r.listen(source, timeout=duration)
        print("录音结束。")
    return audio

def speech_to_text(audio):
    """将音频转为文字"""
    r = sr.Recognizer()
    try:
        text = r.recognize_sphinx(audio, language='chi_sim')  # 使用Sphinx进行本地语音识别
        print("识别结果:", text)
        return text
    except sr.UnknownValueError:
        print("无法识别音频内容。")
        return ""
    except sr.RequestError as e:
        print("语音识别服务请求失败; {0}".format(e))
        return ""

def extract_meeting_info(text):
    """从文本中提取会议信息"""
    info = {
        '会议主题': None,
        '决议内容': [],
        '待办事项': [],
        '负责人': [],
        '截止时间': None
    }

    # 提取会议主题(假设主题在“会议主要讨论了”之后)
    match = re.search(r'会议主要讨论了(.*?)。', text)
    if match:
        info['会议主题'] = match.group(1).strip()

    # 提取决议内容(如“决定在...上线”)
    matches = re.findall(r'决定在(.*?)上线', text)
    for match in matches:
        info['决议内容'].append(f"产品上线日期定为{match.strip()}")

    # 提取待办事项和负责人
    matches = re.findall(r'(.*?)负责(.*?)。', text)
    for name, task in matches:
        info['待办事项'].append(f"{name.strip()}负责{task.strip()}")
        info['负责人'].append(name.strip())

    # 提取截止时间(如“12月25日”)
    match = re.search(r'(\d{1,2}月\d{1,2}日)', text)
    if match:
        info['截止时间'] = match.group(1).strip()

    return info

def generate_meeting_summary(info):
    """生成结构化会议纪要"""
    summary = f"会议主题:{info['会议主题']}\n"
    summary += "决议内容:\n"
    for item in info['决议内容']:
        summary += f"- {item}\n"
    summary += "待办事项:\n"
    for item in info['待办事项']:
        summary += f"- {item}\n"
    summary += f"截止时间:{info['截止时间']}\n"
    return summary

def save_to_file(summary, filename="meeting_summary.txt"):
    """将会议纪要保存为文本文件"""
    with open(filename, 'w', encoding='utf-8') as f:
        f.write(summary)
    print(f"会议纪要已保存至 {filename}")

if __name__ == "__main__":
    # 步骤1:录制音频
    audio = record_audio(duration=10)

    # 步骤2:语音转文字
    text = speech_to_text(audio)
    if not text:
        print("未识别到有效内容,程序退出。")
        exit()

    # 步骤3:提取关键信息
    info = extract_meeting_info(text)

    # 步骤4:生成结构化纪要
    summary = generate_meeting_summary(info)
    print("\n生成的会议纪要:")
    print(summary)

    # 步骤5:保存为文件
    save_to_file(summary)

代码说明

  • 语音识别:使用SpeechRecognition库的recognize_sphinx方法,基于本地的Sphinx语音识别引擎进行识别。该方法无需联网,适合本地运行。
  • 信息提取:通过正则表达式提取会议中的关键信息,如“决定在…上线”、“负责…”、“截止时间”等。
  • 结构化输出:将提取的信息整理为清晰的文本格式,并保存为.txt文件。

示例运行

输入(用户语音):
“今天会议主要讨论了新产品的发布时间,我们决定在12月25日上线,由张经理负责协调,李工负责测试。”

输出(结构化会议纪要):

会议主题:新产品的发布时间
决议内容:
- 产品上线日期定为12月25日
待办事项:
- 张经理负责协调
- 李工负责测试
截止时间:12月25日

总结

本文介绍了如何使用Python开发一个“智能会议纪要生成助手”,涵盖语音识别、信息提取和结构化输出三大核心功能。该项目适合中级以下开发者在短时间内实现,并具备良好的扩展性。未来可进一步引入更复杂的NLP模型(如BERT)来提升信息提取的准确率,或增加Markdown格式输出、GUI界面等高级功能。

通过本项目,开发者可以深入理解语音识别、文本处理与结构化输出的实现方式,为后续开发更复杂的AI应用打下基础。


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注