文章插图
类别和情绪之间是否存在某种模式?
文章插图
除了政治新闻偏于负面,科技新闻偏于正面,大多数新闻标题的情绪都是中性的 。
命名实体识别NER (named -entity recognition)是将非结构化文本中提到的命名实体用预定义的类别(如人名、组织、位置、时间表达式、数量等)标记的过程 。
训练一个NER模型是非常耗时的,因为它需要一个非常丰富的数据集 。幸运的是已经有人替我们做了这项工作 。最好的开源NER工具之一是SpaCy 。它提供了能够识别几种实体类别的不同NLP模型 。
文章插图
我将用SpaCy模型encoreweb_lg(训练于web数据的英语大模型)来举例说明我们通常的标题(原始文本,非预处理):
## call modelner = spacy.load("en_core_web_lg")## tag text txt = dtf["text"].iloc[0] doc = ner(txt)## display result spacy.displacy.render(doc, style="ent")
文章插图
但是我们如何把它变成一个有用的特性呢?这就是我要做的:
对数据集中的每个文本观察运行NER模型,就像我在上一个示例中所做的那样 。
对于每个新闻标题,我将把所有已识别的实体放在一个新列(名为“tags”)中,并将同一实体在文本中出现的次数一并列出 。在本例中,将是
{ (‘Will Smith’, ‘PERSON’):1,然后我将为每个标签类别(Person, Org, Event,…)创建一个新列,并计算每个标签类别中发现的实体的数量 。在上面的例子中,特性是
(‘Diplo’, ‘PERSON’):1,
(‘Nicky Jam’, ‘PERSON’):1,
(“The 2018 World Cup’s”, ‘EVENT’):1 }
tags_PERSON = 3
tags_EVENT = 1
## tag text and exctract tags into a listdtf["tags"] = dtf["text"].apply(lambda x: [(tag.text, tag.label_) for tag in ner(x).ents] )## utils function to count the element of a list def utils_lst_count(lst): dic_counter = collections.Counter() for x in lst: dic_counter[x] += 1 dic_counter = collections.OrderedDict( sorted(dic_counter.items(), key=lambda x: x[1], reverse=True)) lst_count = [ {key:value} for key,value in dic_counter.items() ] return lst_count ## count tags dtf["tags"] = dtf["tags"].apply(lambda x: utils_lst_count(x)) ## utils function create new column for each tag category def utils_ner_features(lst_dics_tuples, tag): if len(lst_dics_tuples) > 0: tag_type = [] for dic_tuples in lst_dics_tuples: for tuple in dic_tuples: type, n = tuple[1], dic_tuples[tuple] tag_type = tag_type + [type]*n dic_counter = collections.Counter() for x in tag_type: dic_counter[x] += 1 return dic_counter[tag] else: return 0 ## extract features tags_set = [] for lst in dtf["tags"].tolist(): for dic in lst: for k in dic.keys(): tags_set.append(k[1]) tags_set = list(set(tags_set)) for feature in tags_set: dtf["tags_"+feature] = dtf["tags"].apply(lambda x: utils_ner_features(x, feature)) ## print result dtf.head()
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 茶在生活中的其他用处,玫瑰花茶泡法技巧
- 把MySQL中的各种锁及其原理都画出来
- 互动直播中的前端技术——即时通讯
- 茶叶在旅行中的作用,白茶的保健功效介绍
- 敦煌月牙泉其中的水,辨证茶疗与疾病的关系
- 人的身材在一天中的什么时候最高?
- 一款强大的本地文件内容搜索软件,可搜索文件中的文字
- 图解 Go 微服务中的熔断器和重试
- 血缘关系在中国文化中的作用
- Netty 中的内存分配浅析