新闻关键词提取技术指南

在数字营销和搜索引擎优化(SEO)领域,关键词的选择至关重要。它不仅帮助内容创和博主更精准地定位目标受众,还能推动趋势的形成。一旦算法能够识别出文章中频繁出现的词汇,这些词汇就会成为热门话题,并可能被用作标签。本文将介绍如何从流行的新闻API中提取关键词,并使用自然语言处理(NLP)技术来分析这些关键词。

开始之前

将使用新闻API来收集新闻,这是一个简单的HTTP REST API,用于搜索和检索网络上的实时文章。可以通过指定一个或多个领域来获取相关新闻,也可以指定特定的域名来获取新闻。新闻API需要一个API密钥,可以通过在newsapi.org网站上注册获得。注册过程简单,完成后即可在个人资料中查看API密钥。

首先,需要安装newsapi-python库,并导入它:

pip install newsapi-python from newsapi.newsapi_client import NewsApiClient

新闻API提供了三个端点——everything和top headlines,每个端点都有不同的参数。可以通过访问官方网站的文档来获取这些参数。将使用所有的端点参数,包括q(搜索关键词)、language(语言)、page_size(页面大小)、domain sources(域名来源)、category(类别)等。

q参数是最重要的,它是在新闻标题或正文中搜索的关键词或短语。如果需要商业新闻,q='business';如果需要科技新闻,q='tech'。

# 初始化 newsapi = NewsApiClient(api_key='API密钥') # /v2/everything all_articles = newsapi.get_everything(q='tech', language='en', page_size=6)

all_articles的数据类型是字典。可以使用字典方法来找到键:

print(all_articles.keys()) # dict_keys(['status', 'totalResults', 'articles'])

这将提取前五篇文章:

article_text = all_articles['articles'][:6] # 让用pandas更好地查看这些数据 import pandas as pd df = pd.DataFrame(article_text) print(df) # 以表格格式打印新闻 print(df.head(5))

每条提取的新闻都包含来源、标题、描述、URL、图片URL、发布时间和内容。代码没有指定domain_source,所以可以从任何来源获取新闻。只对从标题中提取关键词感兴趣。标题列需要转换为字符串以进行进一步的NLP处理。

需要的列是标题。将突出显示它:

col = df['title'] text = col.to_string(index=False) # index=False去掉行号 print(text)

自然语言处理与NLTK

自然语言处理(NLP)是计算机语言学的一个子领域,涉及计算机与人类语言的交互。计算机或程序可以通过NLP听到、阅读和解释文本。NLTK(自然语言工具包)是用于统计和符号语言处理的最常用库之一。它包含许多训练好的模型、语料库,并提供诸如分词、词形还原、停用词和词干提取等包,帮助机器处理单词。

对于mac和Linux用户安装NLTK:

pip install --user -U nltk

对于Windows用户:

pip install nltk nltk.download()

当运行nltk.download()时,会打开一个新窗口显示NLTK下载器。完成下载并安装所有列出的包。然后导入它:

import nltk

NLTK执行语言任务,如分词。分词是程序尝试将其接收到的单词或短语分割成单个单位的过程。句子中的这些单个单位称为标记。

from nltk.tokenize import word_tokenize # 已经在text变量中有需要的文本。只需继续分词 word_token = word_tokenize(text) print(word_token)

它显示为单个单词的列表。NLTK有一个名为freqdist的函数。Freqdist为用户提供文本中所有单词的频率分布。这是概率计算中的一个实用技能。它有most_common()等方法。可以这样检查一个单词在文本中出现的次数:

from nltk.probability import FreqDist # 使用freqdist获取每个单词的频率 new_text = FreqDist(word_token) for countt in new_text: print(f”‘{countt}’出现{new_text[countt]}次”)

要获取单个单词的频率:

print(new_text['Tech'])

要获取最常见的单词,考虑使用most_common()方法:

# 使用.most_common()方法获取前10个重复出现的单词 wordcount_10 = new_text.most_common(10) print(wordcount_10)

去除停用词

虽然得到了前10个最常见的单词,但答案仍然模糊。使用TF/IDF定义分析关键词的方式,文本中越常见的单词,得分越低。出现频率越高,得分越高。

像‘The’这样的单词是常用词。它们只是填充词,不能告诉任何关于文章的信息。它们只占用空间。将用停用词来去除它们。

停用词是常用但不影响文本的单词。它们对搜索引擎来说毫无用处。像‘the’、‘is’、‘an’、‘his’等都是停用词的例子。从文本中去除停用词可以给更好的文本上下文,因为程序专注于重要的文本。

要使用停用词,将从nltk.corpus模块的nltk.collection导入停用词集合。

from nltk.corpus import stopwords

一个快速的例子显示,英语的停用词集合中有超过179个停用词。

# 打印停用词的数量 print(len(stopwords.words('english')) Output: 179

当实现停用词时,将文本与整个停用词集合进行比较。如果文本中的单词与集合中的停用词匹配,它将被移除。只有没有匹配的单词才会被保留。

# 去除停用词 # 指定语言 stop_words = (stopwords.words('English')) filtered_text = [] for sw in word_token: if sw not in stop_words: filtered_text.append(sw) print(filtered_text)

在新文本上使用FreqDist most_common()函数:

# 在过滤后的文本上使用freqdist text_content = FreqDist(filtered_text) top_10 = text_content.most_common(10) print(top_10)

1. 更大的文本将提供更好的关键词频率输出。小文本将有更小的词汇集可供提取。

2. 去除停用词、填充词和标点符号很重要。它们只占用不必要的空间,忽略了实际需要的单词。

3. 使用尽可能多的查询来针对技术领域内更具体的细分市场。可以有q='tech'、'programming'、'natural language'。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485