我正试图构建一个分类器,通过预测出处编译器来检测是否存在错误。为此,我有一个由json格式的汇编代码组成的数据集:

特别是,我希望选择作为功能说明,所以推送,移动,jmp,..etc,并创建一个特征向量,其中包含的次数,一个功能出现。所以,我想用这个词袋。要做到这一点,我的代码如下:
#libraries
import numpy as np
import pandas as pd
import json as j
import re
import nltk
from nltk.tokenize import word_tokenize
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import *
from sklearn.metrics import confusion_matrix, classification_report
from sklearn import svm
#for visualizing data
import matplotlib.pyplot as plt
import seaborn as sns; sns.set(font_scale=1.2)
%matplotlib inline
json_data = None;
with open('training_dataset.jsonl') as data_file:
lines = data_file.readlines()
joined_lines = "[" + ",".join(lines)+"]"
json_data = j.loads(joined_lines)
data = pd.DataFrame(json_data)
data.head()
vect = CountVectorizer()
data['instructions'] = data['instructions'].apply(lambda x: ' '.join(x))
vect.fit_transform(data['instructions'])
a =vect.vocabulary_
a我从中得到了一本字典:

有越来越多的键,值对。在这一点上,我试图消除寄存器,所以我的想法是迭代字典,删除有数字的键,所以我写了以下内容:
def hasNumbers(inputString):
return any(char.isdigit() for char in inputString)
for k in list(a.keys()):
if hasNumbers(k):
del a[k]但实际上,这并不是一个好主意,因为我也有没有数字的注册,例如rdi。
在这一点上,我不知道如何移动,我不确定我是否走的正确的方式。有人能帮帮我吗?谢谢已经提前了。
编辑2现在我正在尝试使用json文件,不是用熊猫打开它,而是以字典的形式打开它,所以:

我的愿望是,如建议的那样,把每个键分开,这样就可以消除寄存器。所以,我的代码是:
for key in json_data:
splitted = key.split[0]但我收到以下错误消息:
AttributeError: 'dict' object has no attribute 'split'我现在对如何操作感到非常困惑。
编辑3或我试图做以下工作:
for v in json_data.values():
splitted = v.split[0]但它提供了以下错误消息:
AttributeError: 'list' object has no attribute 'values'我认为一个问题是各种推送r12 ..。等等都列在清单上了,所以我不知道该怎么做。
实际上,编辑4我试图以这样的方式解决上面的问题:
for v in json_data[0].values():
splitted = v.split[0]但是,我再次收到了错误消息:
AttributeError: 'list' object has no attribute 'split'编辑5现在,我试着用熊猫打开的文件来做这个,所以:
data['features'] = [i.split[0] for i in data['instructions']]但是,我仍然得到了以下错误:
AttributeError: 'list' object has no attribute 'split'或者我也试过:
feat = [i.split[0] for i in json_data[0].values()]但是得到与上面相同的错误。
发布于 2019-10-25 19:17:53
特别是,我希望选择作为功能说明,所以推送,移动,jmp,..etc,并创建一个特征向量,其中包含的次数,一个功能出现。
不必为示例程序完全读取每条指令,您可以读取每条指令的第一个单词来获取操作码,然后从这些操作码中创建一个特征向量。
假设,
sample_program[i] = ['push r12', 'push rbp', 'xor edx edx', ...],即指令列表,然后将opcodes[i]定义为
opcodes[i] = [instruction.split[0] for instruction in sample_program[i]]
#['push', 'push', 'xor']现在,您可以从这些操作码的集合中创建特征向量。
https://datascience.stackexchange.com/questions/62231
复制相似问题