最近参加一个NLP的竞赛,赛方提供了10万条数据。由于是脱敏数据,所以作NLP之前需要先作word2vec,这时就需要将标点符号和无意义的词(比如“的”)去掉,我们采用的方法就是去掉高频词,所以首先要找到高频词。
如何找到高频词呢, 这里当然可以使用dict了,但是有没有更高级一点的方法呢。
当然有了,我们可以使用collections的Counter,并且使用Pandas来替代读取数据的解析数据的部分
首先使用pandas来读取和解析数据
data_path = "E:\\ML_learning\\Daguan\\data\\train_set.csv"
train_data = pd.read_csv(data_path)
article = train_data["article"]
f = lambda x: x.split(" ")
article_list = article.apply(f)
赛方提供了4列数据,其中第二列是我们需要的数据,这里使用一个lambda和article.apply(f)来将每一句话都变成一个list
然后对每个list调用Counter的update方法获得词频数据
word_counts = Counter()
for line in article_list:
word_counts.update(line)
最后分析统计到的数据,并将其可视化
counter_list = sorted(word_counts.items(), key=lambda x: x[1], reverse=True)
label = list(map(lambda x: x[0], counter_list[:20]))
value = list(map(lambda y: y[1], counter_list[:20]))
plt.bar(range(len(value)), value, tick_label=label)
plt.show()
数据太多,我们只显示其前20个数据
使用bar char来画图
最后出来的图像