关键词提取技术关注的是从文档中自动提取一组代表性短语,这些短语能够简洁地总结文档内容(Hasan和Ng,2014)。关键词是一个短语(通常一到三个词),它提供了文档的核心思想,并反映了文档的内容,从而捕捉到讨论的主要话题并提供内容摘要。
本教程将逐步展示如何使用Python中的TFIDF技术,以一种流畅且简单的方式从文本文档中提取关键词。关键词提取过程包括以下步骤:
在本教程中,将使用Theses 100标准数据集来评估关键词提取方法。These 100数据集包含新西兰怀卡托大学的100篇完整的硕士和博士论文。这里使用的版本只包含99个文件,因为有一个文件没有包含关键词。论文主题非常多样:从化学、计算机科学和经济学到心理学、哲学、历史等。每篇文档的平均关键词数量约为7.67个。
import os
path = "/content/drive/MyDrive/Data/theses100/theses100/"
all_files = os.listdir(path+"docsutf8")
all_keys = os.listdir(path+ "keys")
print(len(all_files)," files n",all_files, "n", all_keys) # 不一定是排序的
all_documents =[]
all_keys = []
all_files_names = []
for i, fname in enumerate(all_files):
with open(path+'docsutf8/'+fname) as f:
lines = f.readlines()
key_name= fname[:-4]
with open(path+'keys/'+key_name+'.key') as f:
k = f.readlines()
all_text = ' '.join(lines)
keyss = ' '.join(k)
all_documents.append(all_text)
all_keys.append(keyss.split("n"))
all_files_names.append(key_name)
预处理包括分词、词形还原、小写化、去除数字、空白和少于三个字母的词、去除停用词、去除符号和标点。不会解释这些函数,因为这不是本文的目的。对于词形还原,使用了WordNetLemmatizer。不建议执行词干提取,因为它在某些情况下会改变词根。
import nltk
nltk.download('stopwords')
nltk.download('wordnet')
import spacy
import nltk
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
import regex as re
import string
import numpy as np
import nltk.data
import re
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
from nltk.stem import WordNetLemmatizer
from nltk import word_tokenize, sent_tokenize, pos_tag
def preprocess_text(text):
# 1. 分词为字母词元
text = remove_numbers(text)
text = remove_http(text)
text = remove_punctuation(text)
text = convert_to_lower(text)
text = remove_white_space(text)
text = remove_short_words(text)
tokens = toknizing(text)
# 2. 词性标注
pos_map = {'J': 'a', 'N': 'n', 'R': 'r', 'V': 'v'}
pos_tags_list = pos_tag(tokens)
# 3. 小写化和词形还原
lemmatiser = WordNetLemmatizer()
tokens = [lemmatiser.lemmatize(w.lower(), pos=pos_map.get(p[0], 'v')) for w, p in pos_tags_list]
return tokens
之后,清理每个文档的黄金关键词,并执行词形还原,以便于后续与TFIDF算法产生的词进行匹配。