ABSA项目 P3-2 数据预处理与异常值剔除(2)
上节课给大家详细介绍了模型结构,这节课,我们就开始做数据预处理了。数据预处理阶段,我们需要完成两个任务,一个是将样本文件处理成一句一行的形式,方便读取,另一个是,剔除异常数据。
原样本格式
英 O -1 寸 O -1 液 B-ASP 2 晶 I-ASP 2 屏 I-ASP 2 显 O -1 示 O -1 效 O -1 果 O -1 出 O -1 色 O -1
合并成单行
英 寸 液 晶 屏 显 示 效 果 出 色,O O B-ASP I-ASP I-ASP O O O O O O,-1 -1 1 1 1 -1 -1 -1 -1 -1 -1
异常数据
其 他 功 能 也 很 实 用,O B-ASP I-ASP I-ASP I-ASP O O O,-1 -1 1 1 -1 -1 -1 -1
代码示例
1、添加配置项
# config.py TRAIN_FILE_PATH = './output/process/atepc.train.csv' TEST_FILE_PATH = './output/process/atepc.test.csv'
2、合并样本数据
按空行切分后,合并句子,每行一句,再把不同多个样本文件合并成一个,方便读取。
# process.py from config import * import pandas as pd def format_sample(file_paths, output_path): text = bio = pola = '' items = [] for file_path in file_paths: with open(file_path) as f: for line in f.readlines(): # 单独的空行,表示句子间隔 if line == '\n': items.append({'text': text.strip(), 'bio': bio.strip(), 'pola': pola.strip()}) text = bio = pola = '' continue # 文本、bio标记、情感极性 t, b, p = line.split(' ') text += t + ' ' bio += b + ' ' # 情感极性修正,2表示好评,改为1 p = str(1) if p.strip() == str(2) else p.strip() pola += p + ' ' df = pd.DataFrame(items) df.to_csv(output_path, index=None) if __name__ == '__main__': format_sample([ './input/origin/camera/camera.atepc.train.dat', './input/origin/car/car.atepc.train.dat', './input/origin/notebook/notebook.atepc.train.dat', './input/origin/phone/phone.atepc.train.dat', ], TRAIN_FILE_PATH) format_sample([ './input/origin/camera/camera.atepc.test.dat', './input/origin/car/car.atepc.test.dat', './input/origin/notebook/notebook.atepc.test.dat', './input/origin/phone/phone.atepc.test.dat', ], TEST_FILE_PATH)
3、异常值剔除
正常来说,标记为实体的文字,对应情感数值,要么好评要么差评,不应该为-1。
def check_label(): df = pd.read_csv(TRAIN_FILE_PATH) dct = {} for index, row in df.iterrows(): for b, p in zip(row['bio'].split(), row['pola'].split()): # 删除异常值 if b == 'B-ASP' and p == '-1': print(index, row) # df.drop(index=index, inplace=True) cnt = dct.get((b,p), 0) dct[(b,p)] = cnt+1 print(dct) # df.to_csv(TRAIN_FILE_PATH, index=None)
本文链接:http://ichenhua.cn/edu/note/534
版权声明:本文为「陈华编程」原创课程讲义,请给与知识创作者起码的尊重,未经许可不得传播或转售!