bert分词及词还原

import pandas as pd
from transformers import BertTokenizer
import re

# 加载BERT分词器
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

# 读取Excel文件中的文本数据(假设在第一个sheet中)
file_path = 'Indonesia news overall.xlsx'
df = pd.read_excel(file_path, header=0)  # 使用第一行作为列名

# 合并标题和内容到一列
df['合并文本'] = df['标题'].astype(str) + ' ' + df['内容'].astype(str)

# 对合并文本进行BERT分词
tokenized_texts = []
original_texts = []  # 用于存储还原后的文本

for text in df['合并文本'].values.tolist():
    tokens = tokenizer.tokenize(text)
    input_ids = tokenizer.convert_tokens_to_ids(tokens)
    
    # 将标记的ID转换回原始单词形式
    original_tokens = tokenizer.convert_ids_to_tokens(input_ids)
    
    # 去除特殊字符和标点符号
    cleaned_tokens = [token for token in original_tokens if re.match(r'^\w+$', token) and token != '[CLS]' and token != '[SEP]']

    # 将分词结果合并为一个字符串
    merged_text = " ".join(cleaned_tokens)
    tokenized_texts.append(merged_text)
    original_texts.append(" ".join(original_tokens))

# 将分词结果添加为新的列
df['Tokenized_Content'] = tokenized_texts

# 将还原后的文本添加为新的列
df['Original_Content'] = original_texts

# 删除合并文本列(如果不需要)
df.drop(columns=['合并文本'], inplace=True)

# 将带有分词结果的DataFrame写入新的Excel文件
output_file_path = 'Merged_Tokenized_News.xlsx'
df.to_excel(output_file_path, index=False)

print("合并分词结果后的数据已保存至 Merged_Tokenized_News.xlsx")

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
berttokenizer分词原理是基于Bert模型的分词器。在BertTokenizer中,分词过程分为两个步骤:tokenization和detokenization。在tokenization过程中,原始文本会被分解成一个个标记,每个标记对应于词汇表中的一个字或一个子词。这个过程使用了Bert模型的词汇表进行标记化。每个标记都由一个整数表示,例如`'I am unintended'`会被分解成`[, [4, 5], [0, 1, 2]]`。其中,``对应的是字`'I'`,`[4, 5]`对应的是子词`'am'`,`[0, 1, 2]`对应的是子词`'unintended'`。 在detokenization过程中,标记会被还原成原始文本。使用`tokenizers.detokenize()`方法,可以将标记序列还原为原始文本。例如,`tokenizers.detokenize(tokenizers.tokenize(['I am unintended']))`会得到`[[b'i'], [b'am'], [b'unintended']]`,即`'I am unintended'`的还原结果。 具体实现中,BertTokenizer使用了Bert模型的词汇表进行标记化和还原化操作。词汇表是由字或子词构成的,每个标记对应一个字或子词。通过将词汇表写入文件,每一行含一个字的方式,可以生成BertTokenizer对象,并在初始化时将词汇表文件作为参数传入。然后,使用BertTokenizer对象的`tokenize()`方法可以将文本分解为标记序列。例如,`tokenizers.tokenize(['明天你'])`会得到`[, , ]`,即`'明天你'`被分解成了``、``和``三个标记。 综上所述,BertTokenizer分词原理可概括为:使用Bert模型的词汇表将原始文本分解为标记序列,并通过标记序列还原出原始文本。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [BertTokenizer详解](https://blog.csdn.net/qq_57390446/article/details/131056984)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值