在数字营销和搜索引擎优化(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)
自然语言处理(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'。