文章插图
现在我们可以有一个关于标签类型分布的宏视图 。让我们以ORG标签(公司和组织)为例:
文章插图
为了更深入地进行分析,我们需要解压缩在前面代码中创建的列“tags” 。让我们为一个标题类别绘制出最常见的标签:
y = "ENTERTAINMENT" tags_list = dtf[dtf["y"]==y]["tags"].sum() map_lst = list(map(lambda x: list(x.keys())[0], tags_list)) dtf_tags = pd.DataFrame(map_lst, columns=['tag','type']) dtf_tags["count"] = 1 dtf_tags = dtf_tags.groupby(['type', 'tag']).count().reset_index().sort_values("count", ascending=False) fig, ax = plt.subplots() fig.suptitle("Top frequent tags", fontsize=12) sns.barplot(x="count", y="tag", hue="type", data=https://www.isolves.com/it/ai/2020-06-19/dtf_tags.iloc[:top,:], dodge=False, ax=ax) ax.grid(axis="x") plt.show()
文章插图
接下来是NER的另一个有用的应用:你还记得我们把“Will Smith”的停止词去掉吗?这个问题的一个有趣的解决方案是将“Will Smith”替换为“Will_Smith”,这样它就不会受到删除停止词的影响 。因为遍历数据集中的所有文本以更改名称是不可能的,所以让我们使用SpaCy来实现这一点 。我们知道,SpaCy可以识别一个人的名字,因此我们可以使用它进行名字检测,然后修改字符串 。
## predict wit NERtxt = dtf["text"].iloc[0] entities = ner(txt).ents## tag text tagged_txt = txt for tag in entities: tagged_txt = re.sub(tag.text, "_".join(tag.text.split()), tagged_txt) ## show result print(tagged_txt)
文章插图
词频到目前为止,我们已经了解了如何通过分析和处理整个文本来进行特征工程 。现在我们来看看单个单词的重要性,通过计算n个字母的频率 。n-gram是来自给定文本样本的n项连续序列 。当n元数据的大小为1时,称为单元数据(大小为2时称为双元数据) 。
例如,短语“I like this article”可以分解为:
4个字母:“I”,“like”,“this”,“article”
3双字母:“I like”、“like this”、“this article”
本文以政治新闻为样本,介绍如何计算单、双信息频数 。
y = "POLITICS"corpus = dtf[dtf["y"]==y]["text_clean"]lst_tokens = nltk.tokenize.word_tokenize(corpus.str.cat(sep=" ")) fig, ax = plt.subplots(nrows=1, ncols=2) fig.suptitle("Most frequent words", fontsize=15) ## unigrams dic_words_freq = nltk.FreqDist(lst_tokens) dtf_uni = pd.DataFrame(dic_words_freq.most_common(), columns=["Word","Freq"]) dtf_uni.set_index("Word").iloc[:top,:].sort_values(by="Freq").plot( kind="barh", title="Unigrams", ax=ax[0], legend=False).grid(axis='x') ax[0].set(ylabel=None) ## bigrams dic_words_freq = nltk.FreqDist(nltk.ngrams(lst_tokens, 2)) dtf_bi = pd.DataFrame(dic_words_freq.most_common(), columns=["Word","Freq"]) dtf_bi["Word"] = dtf_bi["Word"].apply(lambda x: " ".join( string for string in x) ) dtf_bi.set_index("Word").iloc[:top,:].sort_values(by="Freq").plot( kind="barh", title="Bigrams", ax=ax[1], legend=False).grid(axis='x') ax[1].set(ylabel=None) plt.show()
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 茶在生活中的其他用处,玫瑰花茶泡法技巧
- 把MySQL中的各种锁及其原理都画出来
- 互动直播中的前端技术——即时通讯
- 茶叶在旅行中的作用,白茶的保健功效介绍
- 敦煌月牙泉其中的水,辨证茶疗与疾病的关系
- 人的身材在一天中的什么时候最高?
- 一款强大的本地文件内容搜索软件,可搜索文件中的文字
- 图解 Go 微服务中的熔断器和重试
- 血缘关系在中国文化中的作用
- Netty 中的内存分配浅析