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'에 쓰는 데 주로 사용됩니다. 한 번에 한 쌍의 라인을 처리하고 해당 라인 쌍을 출력 파일에 씁니다. '''