自然语言处理:单词频率与计数

对于一篇待研究的文章,我们想要获取出最能反映文章主题和风格的单词,单纯的看高频词并不能解决问题,因为一篇文章中频率最高的用词往往是“管道”单词:

import nltk
fdist1 = FreqDist(text1)
fdist1.most_common(50)

 

选择满足一定粒度和出现次数的单词,这里的粒度指的是单词长度,可以看到,稍微有那么点意思了:

fdist1 = FreqDist(text1) 
sorted(w for w in set(text1) if len(w)>7 and fdist1[w]> 7)  

 

当仅考虑单词难以反映文章主旨和风格时,可以从文章的用词搭配着手,而搭配可以理解为频繁出现的双连词,注意《python自然语言处理》书上有一个翻译错误:“搭配是不经常一起出现的词序列”,原文是“A collocation is a sequence of words that occur together unusually often.”,强调的是一起出现的频率异乎寻常。搭配中的单词不能被类似的词置换。例如:当我们表示红酒时,red wine是正确的搭配,而maroon wine则不是,即便它的字面意思也是红色的酒。

计算连词的函数为bigrams是binary+grams的缩写,类似的组合词还要后面用的非常多的ngrams模型。

>>> list(bigrams(['more', 'is', 'said', 'than', 'done']))
[('more', 'is'), ('is', 'said'), ('said', 'than'), ('than', 'done')]

可以使用bigrams+频率统计的方式获取到“搭配”,更方便的是使用 nltk 提供的collocation_list()函数(这里文档上用的是collocations(),但是实际让代码运行时,collocations函数会报错,具体原因我暂时还没有找到):

text1.collocation_list()

 

还可以站在词长的角度看文章,可以看到,text1中词长为3的单词最多

>>> fdist = FreqDist(len(w) for w in text1)
>>> fdist
FreqDist({3: 50223, 1: 47933, 4: 42345, 2: 38513, 5: 26597, 6: 17111, 7: 14399,
  8: 9966, 9: 6428, 10: 3528, ...})

 最后附上的是用于频率统计和单词比较的两个表:

NLTK 频率分布类中定义的函数

示例

描述

fdist = FreqDist(samples)

创建包含给定样本的频率分布

fdist[sample] += 1

增加样本的数目

fdist['monstrous']

计数给定样本出现的次数

fdist.freq('monstrous')

给定样本的频率

fdist.N()

样本总数

fdist.most_common(n)

最常见的n 个样本和它们的频率

for sample in fdist:

遍历样本

fdist.max()

数值最大的样本

fdist.tabulate()

绘制频率分布表

fdist.plot()

绘制频率分布图

fdist.plot(cumulative=True)

绘制累积频率分布图

fdist1 |= fdist2

使用fdist2 更新fdist1 中的数目

fdist1 < fdist2

测试样本在fdist1 中出现的频率是否小于fdist2

一些词比较运算符

函数

含义

s.startswith(t)

测试s是否以t 开头

s.endswith(t)

测试s是否以t 结尾

t in s

测试t是否是s的子串

s.islower()

测试s中所有字符是否包含大小有区别的字符,且都是小写

s.isupper()

测试s中所有字符是否包含大小有区别的字符,且都是大写

s.isalpha()

测试s是否非空,且s中的所有字符是字母

s.isalnum()

测试s是否非空,且s中的所有字符是字母或数字

s.isdigit()

测试s是否非空,且s 中的所有字符都是数字

s.istitle()

测试s是否包含大小有区别的字符,且首字母大写(即,s中所有的词都首字母大写)

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用自然语言模型进行预测房价,一种常见的方法是将自然语言文本转化为数值特征,然后使用机器学习模型进行预测。以下是一个基本的步骤: 1. 数据收集:收集包含有关房屋的自然语言描述的数据。这些数据可以来自于房地产网站、房地产代理或其他相关来源。 2. 数据清洗和预处理:对收集到的文本数据进行清洗和预处理。这包括去除不必要的标点符号、停用词、特殊字符,进行词干化或词形还原等操作。 3. 特征提取:将预处理后的文本数据转换为数值特征。常用的特征提取方法包括词袋模型(Bag-of-Words)和词嵌入(Word Embedding)。词袋模型将文本表示为每个单词计数频率向量,而词嵌入将单词映射到低维度的实数向量空间。 4. 数据标注:为每个文本样本标注对应的房价。这可以是连续值,也可以是离散的价格区间。 5. 模型训练:使用标注好的数据和特征,训练一个机器学习模型进行房价预测。常见的模型包括线性回归、决策树、随机森林、支持向量回归等。可以使用常用的机器学习库(如Scikit-learn、TensorFlow或PyTorch)来训练模型。 6. 模型评估和调优:使用测试集评估模型的性能,并根据需要进行模型调优。常见的评估指标包括均方根误差(RMSE)、平均绝对误差(MAE)等。 7. 预测:使用训练好的模型对新的自然语言描述进行预测,得到对应的房价。 需要注意的是,自然语言模型在房价预测中可能只是其中的一部分,其他特征(如房屋面积、位置、房间数量等)也往往是重要的预测因素。因此,综合使用多个特征和模型可以提高预测准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值