当前位置: 首页 > 知识库问答 >
问题:

NLTK中的实词计数

冯开诚
2023-03-14

NLTK书中有几个单词计数的例子,但实际上它们不是单词计数,而是标记计数。例如,第1章“计算词汇”中说,下面给出了一个单词计数:

text = nltk.Text(tokens)
len(text)

然而,它没有-它给出了一个单词和标点符号计数。你怎样才能得到一个真正的字数(忽略标点符号)?

同样,如何获得一个单词中的平均字符数?显而易见的答案是:

word_average_length =(len(string_of_text)/len(text))

但是,这将关闭,因为:

  1. len(文本的字符串)是一个字符计数,包括空格

我是不是遗漏了什么?这一定是一个非常常见的NLP任务。。。

共有3个答案

穆轶
2023-03-14

使用与dhg相同的解决方案,但测试给定的令牌是否为字母数字,而不是使用正则表达式模式。

from collections import Counter

>>> text = ['this', 'is', 'a', 'sentence', '.']
>>> filtered = [w for w in text if w.isalnum()]
>>> counts = Counter(filtered)
>>> counts
Counter({'this': 1, 'a': 1, 'is': 1, 'sentence': 1})

优点:

  • 在非英语语言中工作得更好,因为“”。isalnum()True,而bool(nonPunct.match ("à")) 是False(至少在法语中,“à”不是标点符号).
  • 不需要使用re包。
沈子实
2023-03-14

使用正则表达式过滤掉标点符号

import re
from collections import Counter

>>> text = ['this', 'is', 'a', 'sentence', '.']
>>> nonPunct = re.compile('.*[A-Za-z0-9].*')  # must contain a letter or digit
>>> filtered = [w for w in text if nonPunct.match(w)]
>>> counts = Counter(filtered)
>>> counts
Counter({'this': 1, 'a': 1, 'is': 1, 'sentence': 1})

把每个单词的长度加起来。除以字数。

>>> float(sum(map(len, filtered))) / len(filtered)
3.75

或者,您可以利用已经进行的计数来防止重新计算。这将单词的长度乘以我们看到它的次数,然后将所有这些相加。

>>> float(sum(len(w)*c for w,c in counts.iteritems())) / len(filtered)
3.75
元胡媚
2023-03-14

nltk标记化

from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer(r'\w+')
text = "This is my text. It icludes commas, question marks? and other stuff. Also U.S.."
tokens = tokenizer.tokenize(text)

退换商品

['This', 'is', 'my', 'text', 'It', 'icludes', 'commas', 'question', 'marks', 'and', 'other', 'stuff', 'Also', 'U', 'S']
 类似资料:
  • 问题内容: NLTK书中有几个字数示例,但实际上它们不是字数而是令牌数。例如,第1章“计数词汇”说以下内容给出了单词计数: 但是,事实并非如此-它给出了单词和标点计数。如何获得真实的字数(忽略标点符号)? 同样,如何获得一个单词的平均字符数?显而易见的答案是: 但是,这将因为以下原因而关闭: len(string_of_text)是一个字符数,包括空格 len(text)是令牌计数,不包括空格,但

  • 问题内容: 我知道如何使用NLTK来获得二元组和三元组的搭配,并将它们应用于我自己的语料库。代码如下。 但是我不确定(1)如何获取特定单词的搭配?(2)NLTK是否具有基于对数似然比的搭配度量? 问题答案: 试试这个代码: 它使用似然测度,还过滤掉不包含“生物”一词的Ngram。

  • 问题内容: 我基本上和这个人有同样的问题.. NLTK书中针对朴素贝叶斯分类器的示例仅考虑单词是否在文档中作为特征出现。它不考虑单词的出现频率作为特征。看一下(“词袋”)。 答案之一似乎表明,内置NLTK分类器无法做到这一点。是这样吗 如何使用NLTK进行频率/词袋NB分类? 为了进行培训,请创建可用于创建ProbDists的适当的FreqDist,然后再将其传递给NaiveBayesClassi

  • 问题内容: 这是Python和NLTK新手问题。 我想查找双峰发生的频率,这些双峰发生在一起的次数超过10次,并且具有最高的PMI。 为此,我正在使用此代码 但是,这并不会将结果限制在前20位。我看到的结果的频率小于10。我是Python世界中的新手。 有人可以指出如何修改它以仅获得前20名。 谢谢 问题答案: 问题在于您尝试使用的方式。我们正在讨论单词搭配。如您所知,单词搭配是关于单词之间的依赖

  • 本文向大家介绍在Python中使用NLTK库实现对词干的提取的教程,包括了在Python中使用NLTK库实现对词干的提取的教程的使用技巧和注意事项,需要的朋友参考一下 什么是词干提取? 在语言形态学和信息检索里,词干提取是去除词缀得到词根的过程─—得到单词最一般的写法。对于一个词的形态词根,词干并不需要完全相同;相关的词映射到同一个词干一般能得到满意的结果,即使该词干不是词的有效根。从1968年开