批量从word切割说话人!!对于转录后的文本进行纯数据清洗切割和区分说话人-批量从word切割说话人

news2024/9/24 0:27:37

battle AI的全过程

文章目录

  • 初步切割
  • 同时基于文本中提取的动词变化类别做切割以及发言人变化
      • 路径设置
  • 迁移模型到GPU
  • bert输出空白debug
  • CPU能运行的语义相似度代码
    • GPU能用了但是没有加切分规则的代码
  • 根据动词变化切分
  • 把发言人替换老师和学生的代码
  • 读取txt的代码
  • 先区分说话人,只对老师进行检测(加快速度)
    • 漏了保存学生的例子,只存了老师
  • 批量从word切割说话人

初步切割

读取word
内容:
teacher-full_原文
2024年09月09日 13:35
发言人1 00:00
要干嘛呢?

发言人1 00:24
原谅我,我要。

发言人1 00:43
那位白白山。

发言人1 01:12
只从发言人1开始提取,分别存入excel,
当发言人变化时,必定切割,
如果 发言人没发生变化,但是关键动词发生变化。
也进行切割。

用迭代的思路,建立每个行为类别的关键动词库,当检测到关键行为变化时进行切分,

每切分好一行包括三列,
发言人,时间,内容
存入excel

同时基于文本中提取的动词变化类别做切割以及发言人变化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

为了在运行过程中添加进度条,可以使用 tqdm 库。tqdm 是一个非常流行的 Python 库,它能帮助我们直观地展示循环中的进度。

路径设置

在这里插入图片描述
查看GPU
在这里插入图片描述

迁移模型到GPU

# 检查是否有可用的 GPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"Using device: {device}")

# 加载BERT中文模型和分词器
bert_model_path = r'D:\微信\WeChat Files\wxid_zrb1xqz427zg22\FileStorage\File\2023-11\课堂分析(客户)\课堂分析(客户)\AI\深度学习\bert-base-chinese'
tokenizer = BertTokenizer.from_pretrained(bert_model_path)
model = BertModel.from_pretrained(bert_model_path)

# 将模型迁移到 GPU(如果有的话)
model.to(device)

bert输出空白debug

在这里插入图片描述

import re
from docx import Document
from transformers import BertTokenizer, BertModel
import torch
from sklearn.metrics.pairwise import cosine_similarity
import pandas as pd
from tqdm import tqdm  # 导入 tqdm 库

# 检查是否有可用的 GPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"Using device: {device}")

# 加载BERT中文模型和分词器
bert_model_path = r'D:\微信\WeChat Files\wxid_zrb1xqz427zg22\FileStorage\File\2023-11\课堂分析(客户)\课堂分析(客户)\AI\深度学习\bert-base-chinese'
tokenizer = BertTokenizer.from_pretrained(bert_model_path)
model = BertModel.from_pretrained(bert_model_path)

# 将模型迁移到 GPU(如果有的话)
model.to(device)

# 定义行为类别与中文动词库
behavior_verb_dict = {
    '讲授': ['解释', '说明', '阐述', '讲解', '介绍', '列举', '总结', '分析', '描述', '指出'],
    '提问': ['问', '询问', '提问', '追问', '质问', '要求', '让你想', '让你回答'],
    '指示': ['指示', '要求', '命令', '安排', '布置', '指引', '让你去做', '请完成'],
    '反馈与评价': ['评价', '反馈', '表扬', '批评', '指出错误', '修正', '纠正', '总结', '认可']
}

# 函数:生成句子的BERT嵌入
def get_bert_embedding(text):
    inputs = tokenizer(text, return_tensors='pt', padding=True, truncation=True, max_length=8)
    inputs = {k: v.to(device) for k, v in inputs.items()}  # 将输入迁移到 GPU
    outputs = model(**inputs)
    # 取 [CLS] token 的向量,代表整个句子的embedding
    embedding = outputs.last_hidden_state[:, 0, :].detach().cpu().numpy()  # 将结果从 GPU 返回到 CPU
    print(f"生成的嵌入向量:{embedding}")
    return embedding

# 函数:计算动词与行为类别动词库的相似度,并返回最佳行为类别及其相似度
def get_most_similar_behavior(verb, behavior_verb_dict, threshold=0.7):
    verb_embedding = get_bert_embedding(verb)
    max_similarity = 0
    best_behavior = '未知行为'

    for behavior, verb_list in behavior_verb_dict.items():
        for behavior_verb in verb_list:
            behavior_verb_embedding = get_bert_embedding(behavior_verb)
            similarity = cosine_similarity(verb_embedding, behavior_verb_embedding)[0][0]  # 计算余弦相似度

            if similarity > max_similarity and similarity > threshold:
                max_similarity = similarity
                best_behavior = behavior

    return best_behavior, max_similarity

# 函数:读取Word文档并过滤开头
def extract_text_from_docx(docx_path):
    doc = Document(docx_path)
    paragraphs = [p.text.strip() for p in doc.paragraphs if p.text.strip()]

    # 打印提取到的段落,调试用
    print("提取到的段落内容:", paragraphs)

    # 过滤掉特定开头的段落 "这一段  teacher-full_原文 2024年09月09日"
    filtered_paragraphs = []
    for para in paragraphs:
        if not para.startswith("这一段") and not para.startswith("teacher-full_原文"):
            filtered_paragraphs.append(para)
    return filtered_paragraphs

# 函数:提取发言人、时间和内容
def extract_speaker_time_content(paragraph):
    # 匹配多个发言人和时间
    matches = re.findall(r'(发言人\d+)\s+(\d{2}:\d{2})\s+([^\n]+)', paragraph)

    # 打印匹配到的内容,调试用
    print(f"当前段落: {paragraph}")
    print(f"匹配到的发言人、时间和内容: {matches}")

    if matches:
        return matches
    return []

# 函数:处理文档内容并进行语义分类和切分(同时根据发言人和行为类别进行切分)
def process_paragraphs(paragraphs, behavi

CPU能运行的语义相似度代码

import re
from docx import Document
from transformers import BertTokenizer, BertModel
import torch
from sklearn.metrics.pairwise import cosine_similarity
import pandas as pd

# 加载BERT中文模型和分词器
bert_model_path = r'D:\微信\WeChat Files\wxid_zrb1xqz427zg22\FileStorage\File\2023-11\课堂分析(客户)\课堂分析(客户)\AI\深度学习\bert-base-chinese'
tokenizer = BertTokenizer.from_pretrained(bert_model_path)
model = BertModel.from_pretrained(bert_model_path)

# 定义行为类别与中文动词库
behavior_verb_dict = {
    '讲授': ['解释', '说明', '阐述', '讲解', '介绍', '列举', '总结', '分析', '描述', '指出'],
    '提问': ['问', '询问', '提问', '追问', '质问', '要求', '让你想', '让你回答'],
    '指示': ['指示', '要求', '命令', '安排', '布置', '指引', '让你去做', '请完成'],
    '反馈与评价': ['评价', '反馈', '表扬', '批评', '指出错误', '修正', '纠正', '总结', '认可']
}

# 函数:生成句子的BERT嵌入
def get_bert_embedding(text):
    inputs = tokenizer(text, return_tensors='pt', padding=True, truncation=True, max_length=8)
    outputs = model(**inputs)
    # 取 [CLS] token 的向量,代表整个句子的embedding
    return outputs.last_hidden_state[:, 0, :].detach().numpy()

# 函数:计算动词与行为类别动词库的相似度,并返回最佳行为类别及其相似度
def get_most_similar_behavior(verb, behavior_verb_dict, threshold=0.7):
    verb_embedding = get_bert_embedding(verb)
    
    max_similarity = 0
    best_behavior = '未知行为'

    for behavior, verb_list in behavior_verb_dict.items():
        for behavior_verb in verb_list:
            behavior_verb_embedding = get_bert_embedding(behavior_verb)
            similarity = cosine_similarity(verb_embedding, behavior_verb_embedding)[0][0]  # 计算余弦相似度
            
            if similarity > max_similarity and similarity > threshold:
                max_similarity = similarity
                best_behavior = behavior

    return best_behavior, max_similarity

# 函数:读取Word文档
def extract_text_from_docx(docx_path):
    doc = Document(docx_path)
    paragraphs = [p.text.strip() for p in doc.paragraphs if p.text.strip()]
    return paragraphs

# 函数:提取发言人、时间和内容
def extract_speaker_time_content(paragraph):
    match = re.match(r'(发言人\d+)\s+(\d{2}:\d{2})\s+(.*)', paragraph)
    if match:
        speaker, time, content = match.groups()
        return speaker, time, content
    return None, None, paragraph

# 函数:处理文档内容并进行语义分类和切分(同时根据发言人和行为类别进行切分)
def process_paragraphs(paragraphs, behavior_verb_dict):
    results = []
    current_behavior = None
    current_speaker = None

    for para in paragraphs:
        speaker, time, content = extract_speaker_time_content(para)
        
        # 获取当前段落中动词的行为分类及相似度
        behavior, similarity = get_most_similar_behavior(content, behavior_verb_dict)

        # 如果发言人或当前行为与上一段不同,则进行切分
        if speaker != current_speaker or behavior != current_behavior:
            results.append({
                '发言人': speaker,
                '时间': time,
                '内容': content,
                '行为类别': behavior,
                '语义相似度': similarity
            })
            current_speaker = speaker  # 更新发言人
            current_behavior = behavior  # 更新行为类别
        else:
            # 如果发言人和行为相同,合并内容
            results[-1]['内容'] += ' ' + content
    
    return results

# 函数:将结果保存到Excel
def save_to_excel(data, excel_path):
    df = pd.DataFrame(data)
    df.to_excel(excel_path, index=False)

# 主程序
docx_path = r'D:\微信\WeChat Files\wxid_zrb1xqz427zg22\FileStorage\File\2023-11\课堂分析(客户)\课堂分析(客户)\TXT数据清洗\数据\teacher-full_原文.docx'
excel_path = r'D:\微信\WeChat Files\wxid_zrb1xqz427zg22\FileStorage\File\2023-11\课堂分析(客户)\课堂分析(客户)\TXT数据清洗\切割\发言切分结果.xlsx'

# 读取word文档
paragraphs = extract_text_from_docx(docx_path)

# 处理文档内容,进行语义切分
processed_data = process_paragraphs(paragraphs, behavior_verb_dict)

# 保存结果到excel
save_to_excel(processed_data, excel_path)

print(f"处理完成,结果已保存到: {excel_path}")

GPU能用了但是没有加切分规则的代码

import re
from docx import Document
from transformers import BertTokenizer, BertModel
import torch
from sklearn.metrics.pairwise import cosine_similarity
import pandas as pd
from tqdm import tqdm  # 导入 tqdm 库

# 检查是否有可用的 GPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"Using device: {device}")

# 加载BERT中文模型和分词器
bert_model_path = r'D:\微信\WeChat Files\wxid_zrb1xqz427zg22\FileStorage\File\2023-11\课堂分析(客户)\课堂分析(客户)\AI\深度学习\bert-base-chinese'
tokenizer = BertTokenizer.from_pretrained(bert_model_path)
model = BertModel.from_pretrained(bert_model_path)

# 将模型迁移到 GPU(如果有的话)
model.to(device)

# 定义行为类别与中文动词库
behavior_verb_dict = {
    '讲授': ['解释', '说明', '阐述', '讲解', '介绍', '列举', '总结', '分析', '描述', '指出'],
    '提问': ['问', '询问', '提问', '追问', '质问', '要求', '让你想', '让你回答'],
    '指示': ['指示', '要求', '命令', '安排', '布置', '指引', '让你去做', '请完成'],
    '反馈与评价': ['评价', '反馈', '表扬', '批评', '指出错误', '修正', '纠正', '总结', '认可']
}


# 函数:生成句子的BERT嵌入
def get_bert_embedding(text):
    inputs = tokenizer(text, return_tensors='pt', padding=True, truncation=True, max_length=8)
    inputs = {k: v.to(device) for k, v in inputs.items()}  # 将输入迁移到 GPU
    outputs = model(**inputs)
    # 取 [CLS] token 的向量,代表整个句子的embedding
    embedding = outputs.last_hidden_state[:, 0, :].detach().cpu().numpy()  # 将结果从 GPU 返回到 CPU
    return embedding


# 函数:计算动词与行为类别动词库的相似度,并返回最佳行为类别及其相似度
def get_most_similar_behavior(verb, behavior_verb_dict, threshold=0.7):
    verb_embedding = get_bert_embedding(verb)
    max_similarity = 0
    best_behavior = '未知行为'

    for behavior, verb_list in behavior_verb_dict.items():
        for behavior_verb in verb_list:
            behavior_verb_embedding = get_bert_embedding(behavior_verb)
            similarity = cosine_similarity(verb_embedding, behavior_verb_embedding)[0][0]  # 计算余弦相似度

            if similarity > max_similarity and similarity > threshold:
                max_similarity = similarity
                best_behavior = behavior

    return best_behavior, max_similarity


# 函数:读取Word文档并过滤开头
def extract_text_from_docx(docx_path):
    doc = Document(docx_path)
    paragraphs = [p.text.strip() for p in doc.paragraphs if p.text.strip()]

    # 打印提取到的段落,调试用
    print("提取到的段落内容:", paragraphs)

    # 过滤掉特定开头的段落 "这一段  teacher-full_原文 2024年09月09日"
    filtered_paragraphs = []
    for para in paragraphs:
        if not para.startswith("这一段") and not para.startswith("teacher-full_原文"):
            filtered_paragraphs.append(para)
    return filtered_paragraphs


# 函数:提取发言人、时间和内容
def extract_speaker_time_content(paragraph):
    # 改进的正则表达式,适应你的文档格式,匹配发言人和任意时间格式
    match = re.match(r'(发言人\d+)\s+(\d{1,2}:\d{2})', paragraph)
    return match


# 函数:处理文档内容并进行语义分类和切分(同时根据发言人和行为类别进行切分)
def process_paragraphs(paragraphs, behavior_verb_dict):
    results = []
    current_speaker = None
    current_time = None
    current_content = ""

    # 使用 tqdm 显示进度条
    for para in tqdm(paragraphs, desc="Processing paragraphs", unit="段"):
        # 提取每个发言人、时间、内容
        match = extract_speaker_time_content(para)

        if match:
            # 如果有匹配,保存之前的内容
            if current_speaker and current_content:
                behavior, similarity = get_most_similar_behavior(current_content, behavior_verb_dict)
                results.append({
                    '发言人': current_speaker,
                    '时间': current_time,
                    '内容': current_content,
                    '行为类别': behavior,
                    '语义相似度': similarity
                })

            # 更新当前发言人和时间,并清空内容
            current_speaker, current_time = match.groups()
            current_content = ""
        else:
            # 如果没有匹配到发言人和时间,认为这是内容的继续
            current_content += " " + para.strip()

    # 保存最后一段发言
    if current_speaker and current_content:
        behavior, similarity = get_most_similar_behavior(current_content, behavior_verb_dict)
        results.append({
            '发言人': current_speaker,
            '时间': current_time,
            '内容': current_content,
            '行为类别': behavior,
            '语义相似度': similarity
        })

    return results


# 函数:将结果保存到Excel
def save_to_excel(data, excel_path):
    df = pd.DataFrame(data)
    df.to_excel(excel_path, index=False)


# 主程序
docx_path = r'D:\微信\WeChat Files\wxid_zrb1xqz427zg22\FileStorage\File\2023-11\课堂分析(客户)\课堂分析(客户)\TXT数据清洗\数据\teacher-full_原文.docx'
excel_path = r'D:\微信\WeChat Files\wxid_zrb1xqz427zg22\FileStorage\File\2023-11\课堂分析(客户)\课堂分析(客户)\TXT数据清洗\切割\发言切分结果.xlsx'

# 读取word文档并过滤开头部分
paragraphs = extract_text_from_docx(docx_path)

# 处理文档内容,进行语义切分
processed_data = process_paragraphs(paragraphs, behavior_verb_dict)

# 打印处理后的数据,调试用
print("处理后的数据:", processed_data)

# 保存结果到excel
save_to_excel(processed_data, excel_path)

print(f"处理完成,结果已保存到: {excel_path}")

根据动词变化切分

当发言人变化时,进行切分。
当发言人没有变化,但动词库包含的语义发生变化时,进行切分。

把发言人替换老师和学生的代码

import re
from docx import Document
from transformers import BertTokenizer, BertModel
import torch
from sklearn.metrics.pairwise import cosine_similarity
import pandas as pd
from tqdm import tqdm  # 导入 tqdm 库
from collections import Counter  # 用于统计发言人发言次数

# 检查是否有可用的 GPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"Using device: {device}")

# 加载BERT中文模型和分词器
bert_model_path = r'D:\微信\WeChat Files\wxid_zrb1xqz427zg22\FileStorage\File\2023-11\课堂分析(客户)\课堂分析(客户)\AI\深度学习\bert-base-chinese'
tokenizer = BertTokenizer.from_pretrained(bert_model_path)
model = BertModel.from_pretrained(bert_model_path)

# 将模型迁移到 GPU(如果有的话)
model.to(device)

# 定义行为类别与中文动词库
behavior_verb_dict = {
    '讲授': ['解释', '说明', '阐述', '讲解', '介绍', '列举', '总结', '分析', '描述', '指出'],
    '提问': ['问', '询问', '提问', '追问', '质问', '要求', '让你想', '让你回答'],
    '指示': ['指示', '要求', '命令', '安排', '布置', '指引', '让你去做', '请完成'],
    '反馈与评价': ['评价', '反馈', '表扬', '批评', '指出错误', '修正', '纠正', '总结', '认可']
}

# 函数:生成句子的BERT嵌入
def get_bert_embedding(text):
    inputs = tokenizer(text, return_tensors='pt', padding=True, truncation=True, max_length=8)
    inputs = {k: v.to(device) for k, v in inputs.items()}  # 将输入迁移到 GPU
    outputs = model(**inputs)
    # 取 [CLS] token 的向量,代表整个句子的embedding
    embedding = outputs.last_hidden_state[:, 0, :].detach().cpu().numpy()  # 将结果从 GPU 返回到 CPU
    return embedding

# 函数:计算动词与行为类别动词库的相似度,并返回最佳行为类别及其相似度
def get_most_similar_behavior(verb, behavior_verb_dict, threshold=0.7):
    verb_embedding = get_bert_embedding(verb)
    max_similarity = 0
    best_behavior = '未知行为'

    for behavior, verb_list in behavior_verb_dict.items():
        for behavior_verb in verb_list:
            behavior_verb_embedding = get_bert_embedding(behavior_verb)
            similarity = cosine_similarity(verb_embedding, behavior_verb_embedding)[0][0]  # 计算余弦相似度

            if similarity > max_similarity and similarity > threshold:
                max_similarity = similarity
                best_behavior = behavior

    return best_behavior, max_similarity

# 函数:读取Word文档并过滤开头
def extract_text_from_docx(docx_path):
    doc = Document(docx_path)
    paragraphs = [p.text.strip() for p in doc.paragraphs if p.text.strip()]

    # 打印提取到的段落,调试用
    print("提取到的段落内容:", paragraphs)

    # 过滤掉特定开头的段落 "这一段  teacher-full_原文 2024年09月09日"
    filtered_paragraphs = []
    for para in paragraphs:
        if not para.startswith("这一段") and not para.startswith("teacher-full_原文"):
            filtered_paragraphs.append(para)
    return filtered_paragraphs

# 函数:提取发言人、时间和内容
def extract_speaker_time_content(paragraph):
    # 改进的正则表达式,适应你的文档格式,匹配发言人和任意时间格式
    match = re.match(r'(发言人\d+)\s+(\d{1,2}:\d{2})', paragraph)
    return match

# 函数:处理文档内容并进行语义分类和切分(根据发言人和动词变化进行切分)
def process_paragraphs(paragraphs, behavior_verb_dict):
    results = []
    current_speaker = None
    current_time = None
    current_content = ""
    current_behavior = None

    speaker_counter = Counter()  # 统计发言人发言次数

    # 使用 tqdm 显示进度条
    for para in tqdm(paragraphs, desc="Processing paragraphs", unit="段"):
        # 提取每个发言人、时间、内容
        match = extract_speaker_time_content(para)

        if match:
            # 如果匹配到新的发言人,切分当前发言
            if current_speaker and current_content:
                behavior, similarity = get_most_similar_behavior(current_content, behavior_verb_dict)
                results.append({
                    '发言人': current_speaker,
                    '时间': current_time,
                    '内容': current_content,
                    '行为类别': behavior,
                    '语义相似度': similarity
                })
            
            # 更新当前发言人和时间,并清空内容
            current_speaker, current_time = match.groups()
            current_content = ""
            current_behavior = None

            # 统计发言人发言次数
            speaker_counter[current_speaker] += 1
        else:
            # 如果没有发言人和时间,累积当前内容
            current_content += " " + para.strip()
            
            # 获取当前内容的行为类别
            new_behavior, similarity = get_most_similar_behavior(current_content, behavior_verb_dict)
            
            # 如果动词(行为类别)发生变化,切分
            if current_behavior and new_behavior != current_behavior:
                results.append({
                    '发言人': current_speaker,
                    '时间': current_time,
                    '内容': current_content,
                    '行为类别': current_behavior,
                    '语义相似度': similarity
                })
                # 更新当前行为类别
                current_content = ""
            
            # 更新当前的行为类别
            current_behavior = new_behavior

    # 保存最后一段发言
    if current_speaker and current_content:
        behavior, similarity = get_most_similar_behavior(current_content, behavior_verb_dict)
        results.append({
            '发言人': current_speaker,
            '时间': current_time,
            '内容': current_content,
            '行为类别': behavior,
            '语义相似度': similarity
        })

    return results, speaker_counter

# 函数:替换发言人名称,将发言最多的替换为“老师”,其余替换为“学生1”、“学生2”依次类推
def replace_speaker_names(results, speaker_counter):
    # 找到发言最多的发言人
    most_common_speaker, _ = speaker_counter.most_common(1)[0]

    speaker_mapping = {}
    student_count = 1

    for speaker in speaker_counter.keys():
        if speaker == most_common_speaker:
            speaker_mapping[speaker] = "老师"
        else:
            speaker_mapping[speaker] = f"学生{student_count}"
            student_count += 1

    # 替换发言人名称
    for result in results:
        result['发言人'] = speaker_mapping[result['发言人']]

    return results

# 函数:将结果保存到Excel
def save_to_excel(data, excel_path):
    df = pd.DataFrame(data)
    df.to_excel(excel_path, index=False)

# 主程序
docx_path = r'D:\微信\WeChat Files\wxid_zrb1xqz427zg22\FileStorage\File\2023-11\课堂分析(客户)\课堂分析(客户)\TXT数据清洗\数据\teacher-full_原文.docx'
excel_path = r'D:\微信\WeChat Files\wxid_zrb1xqz427zg22\FileStorage\File\2023-11\课堂分析(客户)\课堂分析(客户)\TXT数据清洗\切割\发言切分结果.xlsx'

# 读取word文档并过滤开头部分
paragraphs = extract_text_from_docx(docx_path)

# 处理文档内容,进行语义切分
processed_data, speaker_counter = process_paragraphs(paragraphs, behavior_verb_dict)

# 替换发言人名称
processed_data = replace_speaker_names(processed_data, speaker_counter)

# 打印处理后的数据,调试用
print("处理后的数据:", processed_data)

# 保存结果到excel
save_to_excel(processed_data, excel_path)

print(f"处理完成,结果已保存到: {excel_path}")

读取txt的代码

import re
import torch
import pandas as pd
from collections import Counter  # 用于统计发言人发言次数
from transformers import BertTokenizer, BertModel
from sklearn.metrics.pairwise import cosine_similarity
from tqdm import tqdm  # 导入 tqdm 库

# 检查是否有可用的 GPU



# 加载BERT中文模型和分词器
bert_model_path = r'D:\微信\WeChat Files\wxid_zrb1xqz427zg22\FileStorage\File\2023-11\课堂分析(客户)\课堂分析(客户)\AI\深度学习\bert-base-chinese'
tokenizer = BertTokenizer.from_pretrained(bert_model_path)
model = BertModel.from_pretrained(bert_model_path)



device = torch.device('cpu')
model.to(device)
# 定义行为类别与中文动词库
behavior_verb_dict = {
    '讲授': ['解释', '说明', '阐述', '讲解', '介绍', '列举', '总结', '分析', '描述', '指出'],
    '提问': ['问', '询问', '提问', '追问', '质问', '要求', '让你想', '让你回答'],
    '指示': ['指示', '要求', '命令', '安排', '布置', '指引', '让你去做', '请完成'],
    '反馈与评价': ['评价', '反馈', '表扬', '批评', '指出错误', '修正', '纠正', '总结', '认可']
}


# 函数:生成句子的BERT嵌入
def get_bert_embedding(text):
    inputs = tokenizer(text, return_tensors='pt', padding=True, truncation=True, max_length=8)
    inputs = {k: v.to(device) for k, v in inputs.items()}  # 将输入迁移到 GPU
    outputs = model(**inputs)
    embedding = outputs.last_hidden_state[:, 0, :].detach().cpu().numpy()  # 将结果从 GPU 返回到 CPU
    return embedding


# 函数:计算动词与行为类别动词库的相似度,并返回最佳行为类别及其相似度
def get_most_similar_behavior(verb, behavior_verb_dict, threshold=0.7):
    verb_embedding = get_bert_embedding(verb)
    max_similarity = 0
    best_behavior = '未知行为'

    for behavior, verb_list in behavior_verb_dict.items():
        for behavior_verb in verb_list:
            behavior_verb_embedding = get_bert_embedding(behavior_verb)
            similarity = cosine_similarity(verb_embedding, behavior_verb_embedding)[0][0]  # 计算余弦相似度

            if similarity > max_similarity and similarity > threshold:
                max_similarity = similarity
                best_behavior = behavior

    return best_behavior, max_similarity


# 函数:读取TXT文件并过滤开头
def extract_text_from_txt(txt_path):
    with open(txt_path, 'r', encoding='utf-8') as file:
        paragraphs = [line.strip() for line in file if line.strip()]

    # 打印提取到的段落,调试用
    print("提取到的段落内容:", paragraphs)

    # 过滤掉特定开头的段落 "2024年5月7日 下午 6:33|46分钟 12秒"
    filtered_paragraphs = []
    start_flag = False
    for para in paragraphs:
        if para.startswith("说话人"):  # 从检测到“说话人”开始处理
            start_flag = True
        if start_flag:
            filtered_paragraphs.append(para)

    return filtered_paragraphs


# 函数:提取发言人、时间和内容
def extract_speaker_time_content(paragraph):
    # 改进的正则表达式,适应你的文档格式,匹配发言人和任意时间格式
    match = re.match(r'(说话人\s*\d+)\s+(\d{1,2}:\d{2})', paragraph)
    return match


# 函数:处理文档内容并进行语义分类和切分(根据发言人和动词变化进行切分)
def process_paragraphs(paragraphs, behavior_verb_dict):
    results = []
    current_speaker = None
    current_time = None
    current_content = ""
    current_behavior = None

    speaker_counter = Counter()  # 统计发言人发言次数

    # 使用 tqdm 显示进度条
    for para in tqdm(paragraphs, desc="Processing paragraphs", unit="段"):
        # 提取每个发言人、时间、内容
        match = extract_speaker_time_content(para)

        if match:
            # 如果匹配到新的发言人,切分当前发言
            if current_speaker and current_content:
                behavior, similarity = get_most_similar_behavior(current_content, behavior_verb_dict)
                results.append({
                    '发言人': current_speaker,
                    '时间': current_time,
                    '内容': current_content,
                    '行为类别': behavior,
                    '语义相似度': similarity
                })

            # 更新当前发言人和时间,并清空内容
            current_speaker, current_time = match.groups()
            current_content = ""
            current_behavior = None

            # 统计发言人发言次数
            speaker_counter[current_speaker] += 1
        else:
            # 如果没有发言人和时间,累积当前内容
            current_content += " " + para.strip()

            # 获取当前内容的行为类别
            new_behavior, similarity = get_most_similar_behavior(current_content, behavior_verb_dict)

            # 如果动词(行为类别)发生变化,切分
            if current_behavior and new_behavior != current_behavior:
                results.append({
                    '发言人': current_speaker,
                    '时间': current_time,
                    '内容': current_content,
                    '行为类别': current_behavior,
                    '语义相似度': similarity
                })
                # 更新当前行为类别
                current_content = ""

            # 更新当前的行为类别
            current_behavior = new_behavior

    # 保存最后一段发言
    if current_speaker and current_content:
        behavior, similarity = get_most_similar_behavior(current_content, behavior_verb_dict)
        results.append({
            '发言人': current_speaker,
            '时间': current_time,
            '内容': current_content,
            '行为类别': behavior,
            '语义相似度': similarity
        })

    return results, speaker_counter


# 函数:替换发言人名称,将发言最多的替换为“老师”,其余替换为“学生1”、“学生2”依次类推
def replace_speaker_names(results, speaker_counter):
    # 找到发言最多的发言人
    most_common_speaker, _ = speaker_counter.most_common(1)[0]

    speaker_mapping = {}
    student_count = 1

    for speaker in speaker_counter.keys():
        if speaker == most_common_speaker:
            speaker_mapping[speaker] = "老师"
        else:
            speaker_mapping[speaker] = f"学生{student_count}"
            student_count += 1

    # 替换发言人名称
    for result in results:
        result['发言人'] = speaker_mapping[result['发言人']]

    return results


# 函数:将结果保存到Excel
def save_to_excel(data, excel_path):
    df = pd.DataFrame(data)
    df.to_excel(excel_path, index=False)


# 主程序
txt_path = r'D:\微信\WeChat Files\wxid_zrb1xqz427zg22\FileStorage\File\2023-11\课堂分析(客户)\课堂分析(客户)\TXT数据清洗\数据\teacher-full.txt'

excel_path = r'D:\微信\WeChat Files\wxid_zrb1xqz427zg22\FileStorage\File\2023-11\课堂分析(客户)\课堂分析(客户)\TXT数据清洗\切割\第二节发言切分结果.xlsx'

# 读取txt文档并过滤开头部分
paragraphs = extract_text_from_txt(txt_path)

# 处理文档内容,进行语义切分
processed_data, speaker_counter = process_paragraphs(paragraphs, behavior_verb_dict)

# 替换发言人名称
processed_data = replace_speaker_names(processed_data, speaker_counter)

# 打印处理后的数据,调试用
print("处理后的数据:", processed_data)

# 保存结果到excel
save_to_excel(processed_data, excel_path)

print(f"处理完成,结果已保存到: {excel_path}")

先区分说话人,只对老师进行检测(加快速度)

import re
import torch
import pandas as pd
from collections import Counter  # 用于统计发言人发言次数
from transformers import BertTokenizer, BertModel
from sklearn.metrics.pairwise import cosine_similarity
from tqdm import tqdm  # 导入 tqdm 库

# 检查是否有可用的 GPU



# 加载BERT中文模型和分词器
bert_model_path = r'D:\微信\WeChat Files\wxid_zrb1xqz427zg22\FileStorage\File\2023-11\课堂分析(客户)\课堂分析(客户)\AI\深度学习\bert-base-chinese'
tokenizer = BertTokenizer.from_pretrained(bert_model_path)
model = BertModel.from_pretrained(bert_model_path)



device = torch.device('cpu')
model.to(device)
# 定义行为类别与中文动词库
behavior_verb_dict = {
    '讲授': ['解释', '说明', '阐述', '讲解', '介绍', '列举', '总结', '分析', '描述', '指出'],
    '提问': ['问', '询问', '提问', '追问', '质问', '要求', '让你想', '让你回答'],
    '指示': ['指示', '要求', '命令', '安排', '布置', '指引', '让你去做', '请完成'],
    '反馈与评价': ['评价', '反馈', '表扬', '批评', '指出错误', '修正', '纠正', '总结', '认可']
}


# 函数:生成句子的BERT嵌入
def get_bert_embedding(text):
    inputs = tokenizer(text, return_tensors='pt', padding=True, truncation=True, max_length=8)
    inputs = {k: v.to(device) for k, v in inputs.items()}  # 将输入迁移到 GPU
    outputs = model(**inputs)
    embedding = outputs.last_hidden_state[:, 0, :].detach().cpu().numpy()  # 将结果从 GPU 返回到 CPU
    return embedding


# 函数:计算动词与行为类别动词库的相似度,并返回最佳行为类别及其相似度
def get_most_similar_behavior(verb, behavior_verb_dict, threshold=0.7):
    verb_embedding = get_bert_embedding(verb)
    max_similarity = 0
    best_behavior = '未知行为'

    for behavior, verb_list in behavior_verb_dict.items():
        for behavior_verb in verb_list:
            behavior_verb_embedding = get_bert_embedding(behavior_verb)
            similarity = cosine_similarity(verb_embedding, behavior_verb_embedding)[0][0]  # 计算余弦相似度

            if similarity > max_similarity and similarity > threshold:
                max_similarity = similarity
                best_behavior = behavior

    return best_behavior, max_similarity


# 函数:读取TXT文件并过滤开头
def extract_text_from_txt(txt_path):
    with open(txt_path, 'r', encoding='utf-8') as file:
        paragraphs = [line.strip() for line in file if line.strip()]

    # 打印提取到的段落,调试用
    print("提取到的段落内容:", paragraphs)

    # 过滤掉特定开头的段落 "2024年5月7日 下午 6:33|46分钟 12秒"
    filtered_paragraphs = []
    start_flag = False
    for para in paragraphs:
        if para.startswith("说话人"):  # 从检测到“说话人”开始处理
            start_flag = True
        if start_flag:
            filtered_paragraphs.append(para)

    return filtered_paragraphs


# 函数:提取发言人、时间和内容
def extract_speaker_time_content(paragraph):
    # 改进的正则表达式,适应你的文档格式,匹配发言人和任意时间格式
    match = re.match(r'(说话人\s*\d+)\s+(\d{1,2}:\d{2})', paragraph)
    return match


# 函数:处理文档内容并进行语义分类和切分(根据发言人和动词变化进行切分)
def process_paragraphs(paragraphs, behavior_verb_dict):
    results = []
    current_speaker = None
    current_time = None
    current_content = ""
    current_behavior = None

    speaker_counter = Counter()  # 统计发言人发言次数

    # 使用 tqdm 显示进度条
    for para in tqdm(paragraphs, desc="Processing paragraphs", unit="段"):
        # 提取每个发言人、时间、内容
        match = extract_speaker_time_content(para)

        if match:
            # 如果匹配到新的发言人,切分当前发言
            if current_speaker and current_content:
                behavior, similarity = get_most_similar_behavior(current_content, behavior_verb_dict)
                results.append({
                    '发言人': current_speaker,
                    '时间': current_time,
                    '内容': current_content,
                    '行为类别': behavior,
                    '语义相似度': similarity
                })

            # 更新当前发言人和时间,并清空内容
            current_speaker, current_time = match.groups()
            current_content = ""
            current_behavior = None

            # 统计发言人发言次数
            speaker_counter[current_speaker] += 1
        else:
            # 如果没有发言人和时间,累积当前内容
            current_content += " " + para.strip()

            # 获取当前内容的行为类别
            new_behavior, similarity = get_most_similar_behavior(current_content, behavior_verb_dict)

            # 如果动词(行为类别)发生变化,切分
            if current_behavior and new_behavior != current_behavior:
                results.append({
                    '发言人': current_speaker,
                    '时间': current_time,
                    '内容': current_content,
                    '行为类别': current_behavior,
                    '语义相似度': similarity
                })
                # 更新当前行为类别
                current_content = ""

            # 更新当前的行为类别
            current_behavior = new_behavior

    # 保存最后一段发言
    if current_speaker and current_content:
        behavior, similarity = get_most_similar_behavior(current_content, behavior_verb_dict)
        results.append({
            '发言人': current_speaker,
            '时间': current_time,
            '内容': current_content,
            '行为类别': behavior,
            '语义相似度': similarity
        })

    return results, speaker_counter


# 函数:替换发言人名称,将发言最多的替换为“老师”,其余替换为“学生1”、“学生2”依次类推
def replace_speaker_names(results, speaker_counter):
    # 找到发言最多的发言人
    most_common_speaker, _ = speaker_counter.most_common(1)[0]

    speaker_mapping = {}
    student_count = 1

    for speaker in speaker_counter.keys():
        if speaker == most_common_speaker:
            speaker_mapping[speaker] = "老师"
        else:
            speaker_mapping[speaker] = f"学生{student_count}"
            student_count += 1

    # 替换发言人名称
    for result in results:
        result['发言人'] = speaker_mapping[result['发言人']]

    return results


# 函数:将结果保存到Excel
def save_to_excel(data, excel_path):
    df = pd.DataFrame(data)
    df.to_excel(excel_path, index=False)


# 主程序
txt_path = r'D:\微信\WeChat Files\wxid_zrb1xqz427zg22\FileStorage\File\2023-11\课堂分析(客户)\课堂分析(客户)\TXT数据清洗\数据\teacher-full.txt'

excel_path = r'D:\微信\WeChat Files\wxid_zrb1xqz427zg22\FileStorage\File\2023-11\课堂分析(客户)\课堂分析(客户)\TXT数据清洗\切割\第二节发言切分结果.xlsx'

# 读取txt文档并过滤开头部分
paragraphs = extract_text_from_txt(txt_path)

# 处理文档内容,进行语义切分
processed_data, speaker_counter = process_paragraphs(paragraphs, behavior_verb_dict)

# 替换发言人名称
processed_data = replace_speaker_names(processed_data, speaker_counter)

# 打印处理后的数据,调试用
print("处理后的数据:", processed_data)

# 保存结果到excel
save_to_excel(processed_data, excel_path)

print(f"处理完成,结果已保存到: {excel_path}")

漏了保存学生的例子,只存了老师

只分析老师说的话,但是保存的时候把学生一起保存,加进度条
Reading TXT file: 618行 [00:00, 612495.24行/s]
Processing paragraphs: 100%|██████████| 408/408 [00:00<00:00, 398805.88段/s]

在这里插入图片描述
计算量少了一半

import re
import torch
import pandas as pd
from collections import Counter
from transformers import BertTokenizer, BertModel
from sklearn.metrics.pairwise import cosine_similarity
from tqdm import tqdm  # 导入 tqdm 库

# 检查是否有可用的 GPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"Using device: {device}")

# 加载BERT中文模型和分词器
bert_model_path = r'D:\微信\WeChat Files\wxid_zrb1xqz427zg22\FileStorage\File\2023-11\课堂分析(客户)\课堂分析(客户)\AI\深度学习\bert-base-chinese'
tokenizer = BertTokenizer.from_pretrained(bert_model_path)
model = BertModel.from_pretrained(bert_model_path)
model.to(device)

# 定义行为类别与中文动词库
behavior_verb_dict = {
    '讲授': ['解释', '说明', '阐述', '讲解', '介绍', '列举', '总结', '分析', '描述', '指出'],
    '提问': ['问', '询问', '提问', '追问', '质问', '要求', '让你想', '让你回答'],
    '指示': ['指示', '要求', '命令', '安排', '布置', '指引', '让你去做', '请完成'],
    '反馈与评价': ['评价', '反馈', '表扬', '批评', '指出错误', '修正', '纠正', '总结', '认可']
}


# 函数:生成句子的BERT嵌入
def get_bert_embedding(text):
    inputs = tokenizer(text, return_tensors='pt', padding=True, truncation=True, max_length=8)
    inputs = {k: v.to(device) for k, v in inputs.items()}  # 将输入迁移到 GPU
    outputs = model(**inputs)
    embedding = outputs.last_hidden_state[:, 0, :].detach().cpu().numpy()  # 将结果从 GPU 返回到 CPU
    return embedding


# 函数:计算动词与行为类别动词库的相似度,并返回最佳行为类别及其相似度
def get_most_similar_behavior(text, behavior_verb_dict, threshold=0.7):
    text_embedding = get_bert_embedding(text)
    max_similarity = 0
    best_behavior = '未知行为'

    for behavior, verb_list in behavior_verb_dict.items():
        for verb in verb_list:
            verb_embedding = get_bert_embedding(verb)
            similarity = cosine_similarity(text_embedding, verb_embedding)[0][0]  # 计算余弦相似度
            if similarity > max_similarity and similarity > threshold:
                max_similarity = similarity
                best_behavior = behavior
    return best_behavior, max_similarity


# 函数:读取TXT文件并过滤开头,带进度条
def extract_text_from_txt(txt_path):
    paragraphs = []
    with open(txt_path, 'r', encoding='utf-8') as file:
        for line in tqdm(file, desc="Reading TXT file", unit="行"):
            line = line.strip()
            if line:
                paragraphs.append(line)

    # 过滤掉前面无关内容,从说话人部分开始
    filtered_paragraphs = []
    start_flag = False
    for para in paragraphs:
        if para.startswith("说话人"):
            start_flag = True
        if start_flag:
            filtered_paragraphs.append(para)

    return filtered_paragraphs


# 函数:提取发言人、时间和内容
def extract_speaker_time_content(paragraph):
    # 改进的正则表达式,适应你的文档格式,匹配发言人和任意时间格式
    match = re.match(r'(说话人\s*\d+)\s+(\d{1,2}:\d{2})', paragraph)
    return match


# 函数:处理文档内容,划分发言人角色,带进度条
def process_paragraphs(paragraphs):
    results = []
    current_speaker = None
    current_time = None
    current_content = ""

    speaker_counter = Counter()  # 统计发言人发言次数

    for para in tqdm(paragraphs, desc="Processing paragraphs", unit="段"):
        match = extract_speaker_time_content(para)

        if match:
            # 保存之前的发言
            if current_speaker and current_content:
                results.append({
                    '发言人': current_speaker,
                    '时间': current_time,
                    '内容': current_content,
                })

            # 更新当前发言人和时间,并清空内容
            current_speaker, current_time = match.groups()
            current_content = ""

            # 统计发言人发言次数
            speaker_counter[current_speaker] += 1
        else:
            # 累积发言内容
            current_content += " " + para.strip()

    # 保存最后一段发言
    if current_speaker and current_content:
        results.append({
            '发言人': current_speaker,
            '时间': current_time,
            '内容': current_content,
        })

    return results, speaker_counter


# 函数:替换发言人名称,将发言最多的替换为“老师”,其余替换为“学生1”、“学生2”依次类推
def replace_speaker_names(results, speaker_counter):
    most_common_speaker, _ = speaker_counter.most_common(1)[0]

    speaker_mapping = {}
    student_count = 1

    for speaker in speaker_counter.keys():
        if speaker == most_common_speaker:
            speaker_mapping[speaker] = "老师"
        else:
            speaker_mapping[speaker] = f"学生{student_count}"
            student_count += 1

    for result in results:
        result['发言人'] = speaker_mapping[result['发言人']]

    return results


# 函数:分析教师发言内容,带进度条
def analyze_teacher_content(results):
    analyzed_data = []

    current_behavior = None
    for result in tqdm(results, desc="Analyzing Teacher Content", unit="发言"):
        if result['发言人'] == '老师':
            behavior, similarity = get_most_similar_behavior(result['内容'], behavior_verb_dict)

            if current_behavior and behavior != current_behavior:
                # 检测到行为类别变化
                analyzed_data.append({
                    '发言人': result['发言人'],
                    '时间': result['时间'],
                    '内容': result['内容'],
                    '行为类别': behavior,
                    '语义相似度': similarity,
                    '行为变化': '是'
                })
            else:
                analyzed_data.append({
                    '发言人': result['发言人'],
                    '时间': result['时间'],
                    '内容': result['内容'],
                    '行为类别': behavior,
                    '语义相似度': similarity,
                    '行为变化': '否'
                })
            current_behavior = behavior
        else:
            # 对学生的发言保持原样
            analyzed_data.append({
                '发言人': result['发言人'],
                '时间': result['时间'],
                '内容': result['内容'],
                '行为类别': 'N/A',
                '语义相似度': 'N/A',
                '行为变化': 'N/A'
            })

    return analyzed_data


# 函数:将结果保存到Excel,带进度条
def save_to_excel(data, excel_path):
    df = pd.DataFrame(data)
    with tqdm(total=len(data), desc="Saving to Excel", unit="行") as pbar:
        df.to_excel(excel_path, index=False)
        pbar.update(len(data))


# 主程序
txt_path = r'D:\微信\WeChat Files\wxid_zrb1xqz427zg22\FileStorage\File\2023-11\课堂分析(客户)\课堂分析(客户)\TXT数据清洗\数据\teacher-full.txt'
excel_path = r'D:\微信\WeChat Files\wxid_zrb1xqz427zg22\FileStorage\File\2023-11\课堂分析(客户)\课堂分析(客户)\TXT数据清洗\切割\test2.xlsx'

# 读取txt文档并过滤开头部分
paragraphs = extract_text_from_txt(txt_path)

# 处理文档内容,进行发言人角色划分
processed_data, speaker_counter = process_paragraphs(paragraphs)

# 替换发言人名称,将发言最多的替换为“老师”,其余替换为“学生”
processed_data = replace_speaker_names(processed_data, speaker_counter)

# 只分析“老师”的发言,学生的发言保持原样,并检测话语行为变化
analyzed_data = analyze_teacher_content(processed_data)

# 保存结果到excel
save_to_excel(analyzed_data, excel_path)

print(f"处理完成,结果已保存到: {excel_path}")

批量从word切割说话人

只保留区分老师学生存入excel的功能,其他先不要

定义filename为"E:\四1班—吴希敏"
批量读取filename 下面的所有word文件,实现excel的切分,
excel文件名和word文件名保持一致

import os
import re
from docx import Document
import pandas as pd
from tqdm import tqdm
from collections import Counter

# 函数:读取Word文档并过滤开头
def extract_text_from_docx(docx_path):
    doc = Document(docx_path)
    paragraphs = [p.text.strip() for p in doc.paragraphs if p.text.strip()]
    # 过滤掉特定开头的段落
    filtered_paragraphs = [para for para in paragraphs if not para.startswith("这一段") and not para.startswith("teacher-full_原文")]
    return filtered_paragraphs

# 函数:提取发言人、时间和内容
def extract_speaker_time_content(paragraph):
    match = re.match(r'(发言人\d+)\s+(\d{1,2}:\d{2})', paragraph)
    return match

# 函数:处理文档内容,区分发言人
def process_paragraphs(paragraphs):
    results = []
    current_speaker = None
    current_time = None
    current_content = ""
    speaker_counter = Counter()

    for para in tqdm(paragraphs, desc="Processing paragraphs", unit="段"):
        match = extract_speaker_time_content(para)

        if match:
            # 切分当前发言
            if current_speaker and current_content:
                results.append({
                    '发言人': current_speaker,
                    '时间': current_time,
                    '内容': current_content
                })
            current_speaker, current_time = match.groups()
            current_content = ""
            speaker_counter[current_speaker] += 1
        else:
            current_content += " " + para.strip()

    # 保存最后一段发言
    if current_speaker and current_content:
        results.append({
            '发言人': current_speaker,
            '时间': current_time,
            '内容': current_content
        })

    return results, speaker_counter

# 函数:替换发言人名称
def replace_speaker_names(results, speaker_counter):
    most_common_speaker, _ = speaker_counter.most_common(1)[0]
    speaker_mapping = {}
    student_count = 1

    for speaker in speaker_counter.keys():
        if speaker == most_common_speaker:
            speaker_mapping[speaker] = "老师"
        else:
            speaker_mapping[speaker] = f"学生{student_count}"
            student_count += 1

    for result in results:
        result['发言人'] = speaker_mapping[result['发言人']]

    return results

# 函数:将结果保存到Excel
def save_to_excel(data, excel_path):
    df = pd.DataFrame(data)
    df.to_excel(excel_path, index=False)

# 函数:批量处理Word文件并生成Excel文件
def batch_process_word_to_excel(folder_path):
    for file_name in os.listdir(folder_path):
        if file_name.endswith('.docx'):
            docx_path = os.path.join(folder_path, file_name)
            excel_path = os.path.join(folder_path, file_name.replace('.docx', '.xlsx'))
            
            print(f"Processing file: {file_name}")

            # 读取word文档并过滤开头部分
            paragraphs = extract_text_from_docx(docx_path)

            # 处理文档内容,区分发言人
            processed_data, speaker_counter = process_paragraphs(paragraphs)

            # 替换发言人名称
            processed_data = replace_speaker_names(processed_data, speaker_counter)

            # 保存结果到excel
            save_to_excel(processed_data, excel_path)
            print(f"Saved results to: {excel_path}")

# 定义主程序
if __name__ == "__main__":
    filename = r'E:\四1班—吴希敏'
    batch_process_word_to_excel(filename)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2126621.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt常用控件——QLCDNumber

文章目录 QLCDNumber核心属性倒计时小程序倒计时小程序相关问题 QLCDNumber核心属性 QLCDNumber是专门用来显示数字的控件&#xff0c;类似于这样&#xff1a; 属性说明intValue获取的数字值(int).value获取的数字值(double)和intValue是联动的例如value设为1.5&#xff0c;in…

黑马点评22——最佳实践-批处理优化

文章目录 pipeline和mset集群模式下的批处理问题 pipeline和mset pipeline就是大数据量的导入&#xff0c;pipeline是在单机模式下的。 redis的处理耗时相比较网络传输的耗时其实是比较低的。 所以我们最好采用批处理&#xff0c; 集群模式下的批处理问题 在集群环境…

生动灵活,MegActor重磅升级!旷视科技发布MegActor-Σ:首个基于DiT的人像动画方法!

文章链接&#xff1a;https://arxiv.org/pdf/2408.14975 项目链接&#xff1a;https://megactor-ops.github.io/ 亮点直击 一种新颖的混合模态扩散Transformer&#xff08;DiT&#xff09;&#xff0c;能够有效整合音频和视觉控制信号。相较于之前基于UNet的方法&#xff0c;这…

qsort的理解--加强对指针的理解

前言&#xff1a;前面我们学习指针变量&#xff0c;数组指针变量&#xff0c;函数指针变量&#xff1b;这些实际上都是变量&#xff0c;实质上是在内存中开辟一块空间&#xff1b;而这些变量存储的都是地址。还有指针数组&#xff0c;函数指针数组&#xff0c;这指的是把多个地…

AIGC大模型扩图:Sanster/IOPaint(4)

AIGC大模型扩图&#xff1a;Sanster/IOPaint&#xff08;4&#xff09; 用大模型实现AI扩大一张图的周边区域&#xff0c;变得更大&#xff0c;当然必须契合原图&#xff0c;和原图浑然一体。 1、这次模型换用 Sanster/PowerPaint-V1-stable-diffusion-inpainting 启动&#xf…

文件对比工具--BeyondCompare

&#x1f496;简介 Beyond Compare 是一款功能强大的文件和文件夹比较工具&#xff0c;由Scooter Software开发。它可以帮助用户轻松地比较文件和文件夹的差异&#xff0c;并且可以合并变化、同步文件以及备份重要数据 &#x1f4bb;环境 windows &#x1f4d6;版本 Beyon…

RocketMQ安装与使用

什么是消息中间件 消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流&#xff0c;并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型&#xff0c;它可以在分布式环境下扩展进程间的通信。对于消息中间件&#xff0c;常见的角色大致也就有Prod…

OpenCV高阶操作

在图像处理与计算机视觉领域&#xff0c;OpenCV&#xff08;Open Source Computer Vision Library&#xff09;无疑是最为强大且广泛使用的工具之一。从基础的图像读取、 1.图片的上下&#xff0c;采样 下采样&#xff08;Downsampling&#xff09; 下采样通常用于减小图像的…

日志相关知识

1.作用 a.为了代替System.out.println()&#xff0c;可以定义格式&#xff0c;重定向文件等。 b.可以存档&#xff0c;便于追踪问题。 c.可以按级别分类&#xff0c;便于打开或关闭某些级别。 d.可以根据配置文件调整日志&#xff0c;无需修改代码。 …

如何逆转Instagram账号流量减少?实用技巧分享

Instagram作为全球十大社媒之一&#xff0c;不仅是个人分享生活的平台&#xff0c;还是跨境卖家进行宣传推广和客户开发的关键工具。在运营Instagram的过程中&#xff0c;稍有不慎就容易出现账号被限流的情况&#xff0c;对于账号状态和运营工作的进行都十分不利。 一、如何判断…

图片预览、拖拽和缩放组件分享

业务场景 项目中不需要点击小图然后展示大图&#xff0c;类似于elementui中的Image图片组件。适用于直接展示大图&#xff0c;支持拖拽和缩放的场景&#xff0c;比如&#xff1a;用户需要比对两种数据的图片展示&#xff0c;左右两侧进行展示。 效果图 使用方式 在components…

宏任务和微任务+超全面试真题

概念 微任务和宏任务是在异步编程中经常使用的概念&#xff0c;用于管理任务的执行顺序和优先级。 宏任务&#xff1a;setTimeout, setInterval&#xff0c;I/O 操作和 UI 渲染等。微任务&#xff1a; Promise 回调、async/await等 微任务通常比宏任务具有更高的优先级。 执…

S7-1500替代S7-300全解析系列

硬件篇上 01 概述工控人加入PLC工业自动化精英社群 2022年十月初的时候&#xff0c;想必工控圈的小伙伴们都被S7-300系列即将于2023年10月1日退市的消息刷屏了吧&#xff1f;倒退到2020年的10月1日&#xff0c;同样伴随我们多年的ET200S系列也已经悄无声息地退市了。在感叹经…

GEE 将本地 GeoJSON 文件上传到谷歌资产

在地理信息系统&#xff08;GIS&#xff09;领域&#xff0c;Google Earth Engine&#xff08;GEE&#xff09;是一个强大的平台&#xff0c;它允许用户处理和分析大规模地理空间数据。本文将介绍如何使用 Python 脚本批量上传本地 GeoJSON 文件到 GEE 资产存储&#xff0c;这对…

Qt (16)【Qt 事件 —— Qt 事件简介 | 如何重写相关的 Event 函数】

阅读导航 引言一、事件介绍二、如何重写相关的 Event 函数1. 事件的处理简介2. 示例重写鼠标相关的 Event 函数&#xff08;1&#xff09;新建Qt项目&#xff0c;设计UI文件&#xff08;2&#xff09;新添加MyLabel类&#xff08;3&#xff09;重写enterEvent()方法和leaveEven…

分享一个爬虫数据挖掘 农村产权交易数据可视化平台 数据分析大数据 Java、python双版(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

形式向好、成本较低、可拓展性较高的名厨亮灶开源了。

简介 AI视频监控平台, 是一款功能强大且简单易用的实时算法视频监控系统。愿景在最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;减少企业级应用约 95%的开发成本&#xff0c;在强大视频算法加…

建筑业首个通过算法备案的大模型发布

建筑业首个通过算法备案的大模型发布 9月10日上午&#xff0c;上海建工四建集团与中国建筑出版传媒有限公司携手推出了Construction-GPT PRO版&#xff0c;这是一款专为建筑行业设计的施工知识大模型。该模型能够理解和生成长达8000字符的内容&#xff0c;其回答速度达到毫秒级…

LLM大模型学习:NLP三大特征抽取器(CNN/RNN/TF)

NLP三大特征抽取器&#xff08;CNN/RNN/TF&#xff09; 结论&#xff1a;RNN已经基本完成它的历史使命&#xff0c;将来会逐步退出历史舞台&#xff1b;CNN如果改造得当&#xff0c;将来还是有希望有自己在NLP领域的一席之地&#xff1b;而Transformer明显会很快成为NLP里担当…

Linux 信息安全:构建坚固的防御体系

摘要&#xff1a; 本文围绕 Linux 信息安全展开。阐述了 Linux 在信息技术中的重要地位&#xff0c;强调信息安全的重要性以及 Linux 信息安全面临复杂网络环境、演变攻击手段与内部威胁等挑战。详细介绍了 Linux 系统的安全架构与机制&#xff0c;包括用户与权限管理、文件系统…