word2Vec--(1) nltk实现简单的切词,情感分析,文本相似度(TF-IDF)

Nltk

 

from nltk.corpus import brown

(1)    brown.categories()  该文件下的文章目录

(2)    len(brown.sents())

(3)    len(brown.words())

 

tokenizer  分词

nltk.tokenize(sentence)

 

okenize:返回词语在原文的起止位置

注意,输入参数只接受 unicode

In [12]:
print "这是默认模式的tokenize"
result = jieba.tokenize(u'自然语言处理非常有用')
for tk in result:
    print("%s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))

print "\n-----------我是神奇的分割线------------\n"

print "这是搜索模式的tokenize"
result = jieba.tokenize(u'自然语言处理非常有用', mode='search')
for tk in result:
    print("%s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
这是默认模式的tokenize
自然语言		 start: 0 		 end:4
处理		 start: 4 		 end:6
非常		 start: 6 		 end:8
有用		 start: 8 		 end:10

-----------我是神奇的分割线------------

这是搜索模式的tokenize
自然		 start: 0 		 end:2
语言		 start: 2 		 end:4
自然语言		 start: 0 		 end:4
处理		 start: 4 		 end:6
非常		 start: 6 		 end:8
有用		 start: 8 		 end:10

结巴分词   三种切词模式

Import jieba

Jieba.cut(‘开官方那个’,cut_all=True)  # 全模式

Jieba.cut(‘开官方那个’,cut_all=False)  # 精确模式

print "Full Mode:", "/".join(seg_list)

seg_list = jieba.cut_for_search("⼩小明硕⼠士毕业于中国科学院计算所")# 搜索引擎模式

print ", ".join(seg_list)

 

正则表达

Import re

regex_str = [
    r'<[^>]+>', # HTML tags
    r'(?:@[\w_]+)', # @
某⼈人
    r"(?:\#+[\w_]+[\w\'_\-]*[\w_]+)",# 话题标签
    r'http[s]?://(?:[a-z]|[0-9]|[$-_@.&amp;+]|[!*\(\),]|(?:%[0-9a-f][0-9a-f]))+',
    # URLs

]

tokens_re = re.compile(r'('+'|'.join(regex_str)+')', re.VERBOSE | re.IGNORECASE)  #冗长的,
emoticon_re = re.compile(r'^'+emoticons_str+'$', re.VERBOSE | re.IGNORECASE)

tokens_re.findall(s)

 

例子:

 

import re

tweet = 'RT @angelababy: love you baby! :Dhttp://ah.love #168cm'

regex_str = [

   r'<[^>]+>', # HTML tags

   r'(?:@\w+)', # @某⼈人

   r"(?:\#+[\w_]+[\w\'_\-]*[\w_]+)", # 话题标签

   r'http[s]?://(?:[a-z]|[0-9]|[$-_@.&amp;+]|[!*\(\),]|(?:%[0-9a-f][0-9a-f]))+',#URLs

]

tokens_re =re.compile(r'('+'|'.join(regex_str)+')', re.VERBOSE | re.IGNORECASE)

print(tokens_re.findall(tweet))

print(tokens_re.search(tweet))

 

Stemming 词干提取。Walking变成 walk

Lemmatization词性归一  went变成 go

 

 

from nltk.stem.porter import PorterStemmer

porter_stemmer = PorterStemmer()

porter_stemmer.stem(‘presumably’)  输出u’presum’

 

from nltk.stem import WordNetLemmatizer

wordnet_lemmatizer = WordNetLemmatizer()

wordnet_lemmatizer.lemmatize(‘dogs’)   输出:‘u’dog’

 

lemmatizer 能输出该词为名词或者动词这些功能。

pos_tag:    也能标注词性

 

text = nltk.word_tokenize('what does thefox say')

nltk.pos_tag(text)

输出结果:

[('what', 'WDT'), ('does', 'VBZ'), ('the','DT'), ('fox', 'NNS'), ('say', 'VBP')]

 

去除一些不必要的结尾词。

from nltk.corpus import stopwords

filtered_words =

[word for word in word_list if word not instopwords.words('english')]

 

 

 

情感分析:NaiveBayesClassifier

文本相似度:

元素频率FreqDist

                   通过FreqDist(类似一个字典),查看元素出现的次数。

fdist = FreqDist(tokens)
# 它就类似于⼀一个DicT
print(fdist['is']) 

                            #  此刻, 我们可以把最常⽤用的50个单词拿出来

standard_freq_vector = fdist.most_common(50)

size = len(standard_freq_vector)

print(standard_freq_vector)

       文本分类:

  TF: Term Frequency, 衡量term档中出现得有多频繁。

TF(t) = (t出现在档中的次数) / (档中的term总数).

IDF: Inverse DocumentFrequency, 衡量term有多重要。

有些词出现的很多,但是明显不是很有卵如’is',’the‘,’and‘之类

的。为了平衡,我们把罕见的词的重要性(weight)搞

把常见词的重要性搞低。

IDF(t) = log_e(档总数/含有t档总数).

TF-IDF = TF * IDF

解释TF-IDF的小例子:

档有100个单词,其中单词baby出现了3次。

那么,TF(baby) = (3/100) = 0.03.

好,现在我们如果有10M档,baby出现在其中的1000档中。

那么,IDF(baby) = log(10,000,000 / 1,000)= 4

所以, TF-IDF(baby) = TF(baby) * IDF(baby)= 0.03 * 4 = 0.12

Nltk 如何实现tf-idf

from nltk.text importTextCollection

 

### 回答1: 文本相似度分析是比较两个文本之间的相似程度,Python可以通过多种方式实现这一操作。以下是一个简单的示例。 首先,我们需要使用一个文本分析库,例如NLTK或spaCy。这些库提供了许多文本处理工具和算法。 其次,我们需要加载要比较的两个文本。可以从文件中读取文本,或者直接将文本字符串保存在变量中。 接下来,我们需要对文本进行预处理。这包括去除停用词(例如“a”、“is”、“the”等)、标点符号和特殊字符,以及将文本转换为小写。 然后,我们可以使用一种或多种相似度算法来比较两个文本之间的相似程度。常见的算法包括余弦相似度、Jaccard相似度和编辑距离。这些算法的实现通常可以在文本分析库中找到。 最后,我们可以将相似度得分输出为一个介于0和1之间的值。接近1的得分表示文本越相似,接近0的得分表示文本越不相似。 下面是一个示例代码: ```python import nltk from nltk.corpus import stopwords from nltk.tokenize import word_tokenize from nltk.stem import WordNetLemmatizer from nltk.metrics.distance import edit_distance from sklearn.feature_extraction.text import TfidfVectorizer # 加载停用词 stop_words = set(stopwords.words("english")) # 加载文本 text1 = "This is a sample sentence." text2 = "This is another example sentence." # 预处理文本 lemmatizer = WordNetLemmatizer() tokens1 = [lemmatizer.lemmatize(word.lower()) for word in word_tokenize(text1) if word.isalpha() and word.lower() not in stop_words] tokens2 = [lemmatizer.lemmatize(word.lower()) for word in word_tokenize(text2) if word.isalpha() and word.lower() not in stop_words] # 计算文本相似度(余弦相似度) vectorizer = TfidfVectorizer() tfidf_matrix = vectorizer.fit_transform([text1, text2]) similarity_score = (tfidf_matrix * tfidf_matrix.T).A[0, 1] # 计算文本相似度(编辑距离) edit_distance_score = edit_distance("".join(tokens1), "".join(tokens2)) print("余弦相似度:", similarity_score) print("编辑距离:", edit_distance_score) ``` 通过以上步骤,我们可以得到两个文本之间的相似度得分。这个示例只涵盖了最基本的文本相似度分析方法,实际上还有许多其他复杂的技术和算法可以用于更精确的分析。 ### 回答2: 文本相似度分析是指通过计算两个文本之间的相似度来衡量它们之间的相似程度。Python提供了多种库和算法可以实现这个操作,下面我会详细介绍一种常用的方法。 一、文本预处理: 在进行文本相似度分析之前,首先需要对文本进行预处理。常见的预处理方法包括去除停用词、转换为词向量表示、将文本转换为TF-IDF向量等。 二、计算文本相似度: 一种常用的计算文本相似度的方法是通过计算两个文本的余弦相似度来衡量它们之间的相似程度。步骤如下: 1. 将两个文本转换为词向量表示,可以使用词袋模型或TF-IDF向量表示。 2. 计算两个向量的余弦相似度。余弦相似度值越接近于1,表示两个向量越相似;值越接近于0,表示两个向量越不相似。 三、代码示例: 下面是一个简单的示例代码,用于计算两个文本之间的相似度。 ```python import numpy as np from sklearn.feature_extraction.text import CountVectorizer from sklearn.metrics.pairwise import cosine_similarity # 定义两个文本 text1 = "Python是一种简单易学的编程语言" text2 = "Python是一种功能强大的编程语言" # 创建词袋模型 vectorizer = CountVectorizer().fit_transform([text1, text2]) # 计算余弦相似度 similarity = cosine_similarity(vectorizer[0], vectorizer[1]) print("文本相似度:", similarity[0][0]) ``` 以上代码中,我们使用了CountVectorizer来创建词袋模型,并计算了两个文本之间的余弦相似度。 通过上述步骤,我们就可以使用Python实现简单文本相似度分析操作了。当然,还有其他更复杂的方法和算法可以用于文本相似度分析,如基于词向量的方法(如Word2Vec、GloVe)和基于深度学习的方法(如BERT、ELMo),可以根据具体需求选择合适的方法进行分析。 ### 回答3: 文本相似度分析是通过比较文本之间的相似性来确定它们之间的相关性。Python提供了强大的工具和库来实现这样的操作。 首先,我们需要使用自然语言处理工具对文本进行预处理,例如去除标点符号、停用词和数字等。常用的预处理库包括NLTK和spaCy。 在预处理完成后,我们可以使用不同的文本相似度度量方法来比较文本之间的相似度。其中常见的方法包括余弦相似度、欧几里得距离和Jaccard相似度等。 对于余弦相似度,我们可以使用Python中的scikit-learn库来计算。首先,我们需要将文本转换为向量表示,常用的方法是使用词袋模型或TF-IDF模型。然后,我们可以使用cosine_similarity函数来计算两个向量之间的余弦相似度。 对于欧几里得距离和Jaccard相似度,我们可以使用Python中的scipy库来计算。欧几里得距离可以使用euclidean函数,而Jaccard相似度可以使用jaccard_similarity函数来计算。 除了以上方法,还可以使用更高级的文本相似度计算方法,例如Word2Vec或BERT模型。这些模型基于神经网络,能够更好地捕捉文本之间的语义关系。 综上所述,Python提供了丰富的库和工具来实现简单文本相似度分析操作。我们只需要进行预处理,选择适当的相似度度量方法,并使用相应的库函数来计算即可。这些操作可以帮助我们在信息检索、推荐系统和文本分类等领域中处理和分析大量的文本数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值