TF-IDF算法:用 Python 提炼财经新闻

b6335e4fcdabca6ea9248d63642465e0.png

在信息爆炸的今天,我们不可能阅读所有的新闻,那么如果我们使用机器学习,特别是tf-idf算法,如何从所有网络上的文本中获得最重要的信息呢?

这篇文章是使用已知的tf-idf算法从网上获取关键信息的一个案例。目的是鼓励你利用它,并将其纳入一些市场投资策略或任何其他用途。

TF-IDF

TF-IDF这个词来自于“术语频率--逆向文档频率”。这项技术的目标是计算一个词在一个文件中出现的次数。

第一部分,也就是TF,计算你看到每个词的次数。然而,当你计算像"a "这样的常用词的值时,这可能会犯一些错误。这类词被称为停止词,它们指的是冠词、代词、助词等等。这些词可以让你建立一个可以理解的句子,但这些并不真正具有意义。因此,由于它们被广泛使用,它们会有一个高的TF。

考虑到这一点,该技术试图用IDF这个词来纠正这个错误。这一部分修改了TF,考虑到一个词在大量文本中的使用次数。从这个意义上说,如果很多文本多次使用一个词,它的Tf将被惩罚,它将被降低。

作为tf-idf结果的一个例子,我们来看看这些句子。"I’m traveling to Paris this week","There will be so many journeys to Paris next week","Paris is supposed to receive a lot of tourists"。假设我们去掉了停顿词,那么Paris这个词在每个句子中的频率1;但是Paris相对于句子中的其他词的重要性是巨大的,因为Paris出现在所有的句子中。

总而言之,这种技术给了我们一个衡量一个词在文本中的重要性的标准。

实际案例

让我们看一个非常简单的案例,使用TF-IDF来识别历史上的主要话题。

数据集

我们从2009年到2020年的几个英文文本中抽取了一组新闻和观点。我们的数据集包含了日期、标题、新闻正文和被提及的股票。在这篇文章中,我们将只使用日期和标题,因为我们的目标是要抓住主要话题。

预处理

当你处理文本时,必须对文本进行处理,以避免模型中的噪点。也就是说,这些文本应该是清晰的,而且格式相同。因此,我们用以下方式处理了我们的原始文本,通过使用python中的nltk库得到了处理后的文本。

  • 所有的字都用小写。

  • 删除数字和首字母。

  • 删除停顿词。

  • 删除标点符号。

  • 词义化。这意味着将该词还原为一个词的词根同义词。由于de输入 "pos",可以确定词根是来自形容词、动词还是名词。

  • 删除常见的词,如“wall street”, “market”, “stock”, “share”, …

import nltk
from nltk.stem importWordNetLemmatizer
import re
stopwords = nltk.corpus.words('english')
lemmatizer = WordNetLemmatizer()
processed_text = re.sub('[^a-zA-Z]', ' ',original_text)
processed_text = processed_text.lower()
processed_text = processed_text.split()
processed_text = [lemmatizer.lemmatize(word, pos='a') for word in processed_text if word notin set(stopwords)]
processed_text = [lemmatizer.lemmatize(word, pos='v') for word in processed_text if word notin set(stopwords)]
processed_text = [lemmatizer.lemmatize(word, pos='n') for word in processed_text if word notin set(stopwords)]
processed_text = ' '.join(processed_text)
processed_text = re.sub('stock', '', processed_text)

模型

下一步是创建符合我们目的的模型。因此,我们使用python中的sklearn库。由于我们想知道每个日期的关键信息,我们使用 TfidfVectorizer模型。这允许我们设置关键特征的数量,我们将其设置为8个最大特征。

from sklearn.feature_extraction.text importTfidfVectorizer
tf_idf_model = TfidfVectorizer(max_features=8)
processed_text_tf = tf_idf_model.fit_transform(preprocessed_texts)
tf_idf_values = tf_idf_model.idf_
tf_idf_names = tf_idf_model.get_feature_names()

接下来,我们每天用当天数据集中的所有新闻片段来应用这个模型。注意,这个模型不需要训练,因为它是一个确定的算法。通过这种方式,我们得到一组8个代表当天关键信息的词。同样,每个词都有一个tf-idf值,表示它在当天的重要性。

结果

最后,我们将结果总结为以下图表。在这些图表中,出现了模型中的所有相关词汇,在方框中则是相关的新闻。为了澄清结果,第一个图表包含了2019年上半年的信息,第二个图表反映了2019年下半年的情况。

0e0b4ae023fc243db99689f7ec3ccd1f.png

2019年1月至2019年6月的相关议题和相关新闻

728398e32def4dc615f2387f4d8277da.png

2019年7月至2020年1月的相关议题和相关新闻

总结

该模型似乎可以从大量的新闻作品中提取出最重要的词语。最大的挑战是如何利用这个模型提炼信息后,制定一个有利于我们投资的策略。

df5dd96a172f95c041359142be9001f6.png

- 点击下方阅读原文加入社区会员 -

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值