NLTK中的实际字数

发布于 2021-01-29 14:11:20

NLTK书中有几个字数示例,但实际上它们不是字数而是令牌数。例如,第1章“计数词汇”说以下内容给出了单词计数:

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

但是,事实并非如此-它给出了单词和标点计数。如何获得真实的字数(忽略标点符号)?

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

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

但是,这将因为以下原因而关闭:

  1. len(string_of_text)是一个字符数,包括空格
  2. len(text)是令牌计数,不包括空格,但包括标点符号(不是单词)。

我在这里想念什么吗?这必须是非常常见的NLP任务…

关注者
0
被浏览
127
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    删除标点符号

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

    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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看