我目前正在进行一个项目,目的是对一些文本进行分类。为此,我首先需要对文本数据进行标注。我使用了一个网络工具来完成标注,现在我有了一个包含标注信息的JSON文件和一个包含原始文本的纯文本文件。我现在想使用不同的分类器来训练数据,并最终预测所需的结果。
然而,我不知道该从哪里开始。我在网上没有找到我想要的答案,所以我在这里尝试求助。
我该如何处理这些JSON和文本文件呢?据我所知,我需要将这些信息转换成一个.csv文件,其中包含标签、文本信息,以及未标注文本的“none”。所以我想我应该使用.txt文件,将它们与标注文件合并,以便能够检测某个文本句子(或单词)是否有标签。然后我就可以使用.csv数据将其加载到模型中了。
有人能给我一些建议,告诉我该从哪里开始或接下来该怎么做吗?我目前找到的所有资料都是关于数据已经转换并准备好预处理的情况,而我现在正为如何处理标注过程的结果而苦恼。
我的JSON文件大致如下:
{"annotatable":{"parts":["s1p1"]}, "anncomplete":true, "sources":[], "metas":{}, "entities":[{"classId":"e_1","part":"s1p1","offsets":[{"start":11,"text":"This is the text"}],"coordinates":[],"confidence":{"state":"pre-added","who":["user:1"],"prob":1},"fields":{"f_4":{"value":"3","confidence":{"state":"pre-added","who":["user:1"],"prob":1}}},"normalizations":{}},"normalizations":{}}], "relations":[]}
每段文本都有一个classId
(本例中为e_1
)和一个field_value
(本例中f_4
的值为3
)。我需要一步步提取这些信息。首先提取带有相应文本的实体(并在未标注的地方添加“none”),然后在第二步中获取与相应文本相关的字段信息。对应的.txt文件非常简单,如下所示:This is the text
我所有的.json文件都放在一个文件夹中,所有的.txt文件放在另一个文件夹中。
回答:
假设你有一个JSON
文件,其中标签是按你在原始txt
文件中的相应行索引的:
{ 0: "politics" 1: "sports", 2: "weather",}
还有一个txt
文件,其中包含相应索引的原始文本:
0 The American government has launched ... today.1 FC Barcelona has won ... the country.2 The forecast looks ... okay.
那么首先,你确实需要将示例与它们的标签连接起来,然后继续对文本进行特征化并构建机器学习模型。如果你的示例像我的示例一样,通过索引或ID或任何其他识别信息对齐,你可以这样做:
import jsonwith open('labels.json') as json_file: labels = json.load(json_file) # 这会得到一个Python字典,你可以根据索引查找标签。with open(raw.txt) as txt_file: raw_texts = txt_file.readlines() # 这会得到一个列表,你可以通过索引获取原始文本,如下所示:raw_texts[index]。
现在你可以将原始文本与标签匹配起来,你可能希望将它们放入一个单一的数据框中以便于使用(假设它们目前按相同的顺序排列):
import pandas as pddata = pd.DataFrame( {'label': labels.values(), 'text': raw_texts })# label text# 0 politics Sentence_1# 1 sports Sentence_2# 2 weather Sentence_3
现在,你可以使用不同的机器学习库,但对于初学者,我强烈推荐的是scikit-learn
。它提供了关于如何将你的原始文本字符串转换为机器学习可用的特征的良好解释:
以及随后如何使用这些特征来训练分类器:
我展示的DataFrame
应该正好适合开始测试这些scikit-learn
技术。