文档关键词提取技术

关键词提取技术关注的是从文档中自动提取一组代表性短语,这些短语能够简洁地总结文档内容(Hasan和Ng,2014)。关键词是一个短语(通常一到三个词),它提供了文档的核心思想,并反映了文档的内容,从而捕捉到讨论的主要话题并提供内容摘要。

教程概览

本教程将逐步展示如何使用Python中的TFIDF技术,以一种流畅且简单的方式从文本文档中提取关键词。关键词提取过程包括以下步骤:

  • 预处理:处理文档以消除噪声。
  • 形成候选词元:形成n-gram词元作为候选关键词。
  • 关键词加权:使用向量化TFIDF为每个n-gram词元计算TFIDF权重。
  • 排名:根据TFIDF权重降序排列候选词。
  • 选择前n个关键词。

准备数据集

在本教程中,将使用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算法产生的词进行匹配。

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