我想从任何文本文件生成MultiTag。假设我有一个来自机器学习课程的视频的字幕。
"在上一个视频中,我们讨论了逻辑回归的假设表示。我现在喜欢做的是告诉你一些叫做决策边界的事情,这将让我们更好地了解逻辑回归假设函数的计算方法。 回顾一下,这是我们上次写的,我们说假设表示为x等于theta transpose x的g,其中g是这个函数,称为sigmoid函数,看起来像这样。它从零慢慢增加到一个,渐渐地增加到一个"
从上面的文字我想生成标签,如:假设表示,逻辑回归,决策边界,sigmoid函数
任何Tagger都基于两个模型监督和无监督。因为这些文本可以属于任何域,而不仅仅是技术领域,因此我没有适当的训练集来训练我的模型基于监督学习所以我选择无监督技术。
我尝试了不同的python库来生成标签,但没有成功。我用下面的库:
Nltk library,spacy,textBlob,rake,ngram meathod。
我写了自己的方法来解决这个问题,但我只能生成单个标签。我使用Brown nltk语料库来计算文本中每个单词的权重,并根据我对单词列表排序的权重。但它并不准确。以下是代码
import nltk
from nltk.corpus import stopwords
from bs4 import BeautifulSoup
import re
from nltk.corpus import brown
import operator
from _io import open
news_text = brown.words()
fdist = nltk.FreqDist(w.lower() for w in news_text)
def subtitle_to_words( subtitles ):
# Remove HTML
review_text = BeautifulSoup(subtitles, "lxml").get_text()
# Remove non-letters
letters_only = re.sub("[^a-zA-Z]", " ", review_text)
#
# 3. Convert to lower case, split into individual words
words = letters_only.lower().split()
#
# convert the stop words to a set
stops = set(stopwords.words("english"))
#
# 5. Remove stop words
meaningful_words = [w for w in words if not w in stops]
#
# 6. Join the words back into one string separated by space,
# and return the result.
return( meaningful_words)
text=open('text4.txt','r')
withoutStopWords=subtitle_to_words(text)
keyword_dict={}
abs_occurences_dict={}
for m in withoutStopWords:
if m not in abs_occurences_dict.keys():
abs_occurences_dict[m]=1
else:
abs_occurences_dict[m]+=1
keyword_dict[m]=abs_occurences_dict[m]/float((fdist[m.lower()]+1))
sorted_dict = sorted(keyword_dict.items(), key=operator.itemgetter(1),reverse=True)
for i in range(0,int(len(sorted_dict))):
if len(sorted_dict[i][0])>2:
print(sorted_dict[i][0])
任何人都可以建议任何方法或Python库来解决这个问题。