代码拉取完成,页面将自动刷新
# 这个赛题很有意思 要我来做我第一步肯定是做一个关系抽取。因为没有标记数据集,所以我想第一步我的实现方案是依靠句法结构来进行关系抽取
import pandas as pd
train = pd.read_csv("data/train.csv").values.tolist()
import jieba
# print(train)
# for train in train:
# train_question_cut = jieba.lcut(train[1])
# print(train_question_cut)
# 分词结果看出来数字是可以被jieba切分出来的
# 看了看题目 无非就是加减乘除方面的问题 所以第一步是判断问题中数字的数量
# 这里的数字包括文字类型的数字 数字 小数点类型的小数 以及/形式的小数
# 我准备把小数全部归一化成 小数点类型的 这样会简单一些 数据集中总共 1807 个 '/'
# s是一个字符串,比如说s='123',或者s='7.89'
def number_choose(s):
try:
return float(s)
except ValueError:
return False
value_count = 0
new_question = []
for train in train:
question = {}
train_question_cut = jieba.lcut(train[1])
print(train_question_cut)
next_integer = "yes"
question["question"] = train[1]
question["answer"] = train[2]
in_number = []
for i in range(1, len(train_question_cut) - 1):
if next_integer == "pass":
next_integer = "yes"
continue
last_word = train_question_cut[i - 1]
local_word = train_question_cut[i]
next_word = train_question_cut[i + 1]
number = number_choose(local_word)
if number:
in_number.append(number)
print(number)
if "%" in local_word:
number = number_choose(local_word.strip("%"))/100
in_number.append(number)
if local_word == "/" or local_word == "﹕" or local_word == ":":
try:
print(last_word, next_word)
print(int(last_word) / int(next_word))
in_number = in_number[:-1]
in_number.append(int(last_word) / int(next_word))
value_count += 1
next_integer = "pass"
except ValueError:
continue
except ZeroDivisionError:
continue
question["number"] = in_number
if question not in new_question:
new_question.append(question)
print("/_value_count", value_count)
# 这一步我找到 1276 个带/的小数 所以下一步就是我们新建一个数据集 数据集里面就不包含带”/“的小数了 这样会带来一些误差
# 导出新的数据集
import json
json.dump(new_question, open("new_question.json", "w", encoding="utf-8"), ensure_ascii=False, indent=3)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。