대형 모델 문자 생성의 소스 코드 분석: /data/pre.py

https://github.com/ArtificialZeng/GuoDegang-Generation/blob/main/data/pre.py

import os
import re
from tqdm import tqdm
import thulac  # 导入thulac库,thulac是清华大学开发的一个用于中文文本分词和词性标注的工具。

fout = open('crosstalk.txt', 'wb')  # 创建一个以二进制写模式('wb')打开的文件对象,用于写入处理后的内容。
thu1 = thulac.thulac()  # 创建一个 thulac 对象,用于后续的文本分词操作。

for fname in os.listdir('./data'):  # 遍历当前目录下 data 子目录内的所有文件。
    fin = open('./data/' + fname, 'rb')  # 以二进制读模式('rb')打开一个文件,该文件的名字由 data 子目录和当前遍历到的文件名构成。
    lst_line = None  # 初始化 lst_line 变量,用于存储前一行的数据。
    for line in fin:  # 遍历当前打开的文件中的每一行。
        line = line.decode('gbk')  # 将二进制格式的行内容解码为 'gbk' 编码的字符串。
        line = line[line.find(':') + 1:].strip()  # 去掉每一行中 ':' 符号前的所有字符,然后使用 `strip()` 方法去除字符串两侧的空格。
        line = ' '.join([x[0] for x in thu1.cut(line, text=False)]) + '\n'  # 使用 thulac 对每一行进行分词,然后将得到的分词结果用空格连接起来。
        # pattern = re.compile('.')
        # line = ' '.join(pattern.findall(line)) + '\n'
        if lst_line is not None:  # 检查 lst_line 是否为 None,如果不是,说明已经处理过至少一行数据。
            fout.write(lst_line.encode('utf-8'))  # 将 lst_line 和当前行的内容以 'utf-8' 编码格式写入到输出文件。
            fout.write(line.encode('utf-8'))  # 将 lst_line 和当前行的内容以 'utf-8' 编码格式写入到输出文件。
            lst_line = None  # 重置 lst_line 变量为 None,准备处理下一对行。
        else:
            lst_line = line  # 如果 lst_line 是 None,说明这是正在处理的第一行,或者上一对行已经写入输出文件。将当前行的内容保存到 lst_line,准备和下一行一起写入输出文件。


'''
이 코드는 주로 './data' 폴더에 저장된 텍스트 파일을 처리하는 데 사용되며 다음 단계를 수행합니다.

먼저 코드는 중국어 텍스트 분할 및 품사 태깅 도구인 thulac을 사용하여 thulac 개체를 초기화합니다.

'./data' 폴더의 모든 파일을 반복합니다. 각 파일에 대해 내용을 한 줄씩 읽습니다.

읽는 각 라인에 대해 먼저 'gbk' 인코딩을 사용하여 디코딩한 다음 문자열에서 ":" 앞의 모든 문자를 제거하고 문자열 양쪽 끝에 있는 공백 문자를 제거합니다.

다음으로 thulac을 사용하여 문자열을 토큰화하고 토큰화된 결과를 공백과 연결합니다.

그런 다음 이 코드는 이전 라인(있는 경우)이 출력 파일에 기록되었는지 확인하고, 그렇다면 lst_line 변수를 None으로 재설정하고, 그렇지 않으면 현재 라인을 lst_line에 저장합니다.

lst_line이 None이 아니면 lst_line과 현재 줄 내용을 'utf-8'로 인코딩하고 출력 파일 'crosstalk.txt'에 씁니다.

정리하자면 이 코드는 주로 './data' 폴더 아래의 파일들을 처리하고, thulac을 이용하여 텍스트를 분할하고, 처리된 결과를 출력 파일 'crosstalk.txt'에 쓰는 데 주로 사용됩니다. 한 번에 한 쌍의 라인을 처리하고 해당 라인 쌍을 출력 파일에 씁니다. '''

Supongo que te gusta

Origin blog.csdn.net/sinat_37574187/article/details/131934396
Recomendado
Clasificación