如何使用Python计算段落中英语单词的百分比

时间:2014-07-29 09:30:27

标签: python character word-count

让我们说我有一个不同语言的段落。像:

This is paragraph in English. 这是在英国段。Это пункт на английском языке. این بند در زبان انگلیسی است.

我想计算一下此段落的百分比(%)是否包含英文单词。所以想问一下如何在python中做到这一点。

4 个答案:

答案 0 :(得分:3)

首先,get a list of English words。然后,遍历文件并计算!

import string
import urllib2

punctuation = set(string.punctuation)

eng_words_url = 'https://raw.github.com/eneko/data-repository/master/data/words.txt'
eng_words = urllib2.urlopen(eng_words_url).readlines()
eng_words = [w.strip().lower() for w in eng_words]

def remove_punc(str):
    return ''.join(c for c in str if c not in punctuation)

total_count = 0
eng_count = 0
with open('filename.txt') as f:
    for line in f:
        words = remove_punc(line).lower().split()
        total_count += len(words)
        eng_count += sum(1 for word in words if word.lower() in eng_words)

print '%s English words found' % eng_count
print '%s total words found' % total_count

percentage_eng = 0 if total_count == 0 else (float(eng_count) / total_count * 100)
print '%s%% of words were English' % percentage_eng

例如,这是您的示例文本:

  

这是英文段落。这是在英国段.Этопунктнаанглийскомязыке。   اینبنددرزبانانگلیسیاست。

当我运行上面的代码时,输​​出是这样的:

  找到5个英语单词

     

找到16个单词

     

31.25%的单词是英语

正如评论中指出的那样,由于中文单词之间没有空格,因此百分比不正确。总共有22个单词,所以百分比应该是22.7%。

答案 1 :(得分:3)

有些海报发现该段有16个字。但有吗?其中一个问题是,如果您想将英语单词的数量与句子中的单词进行比较,那么仅使用英语语言方法很难。它相对"很容易找到英文单词的数量,但第二部分,即查找句子中的总单词数量,更难,因为你需要资源来消除这个在英国段中包含多少单词的歧义,以便找到英文单词占段落中单词的百分比。

尝试使用Natural Language Toolkit。 NLTK是一个Python库(Python3.0在工作中的兼容性),它具有内置函数,可以满足您正在寻找的内容(单词出现的频率,标记字符串等),以及对英语的访问如果你想通过将句子中的单词与语料库中包含的单词进行比较来查找英语单词,可以用来比较单词的语料库。

附带的书使用Python进行自然语言处理,1版Python 2.x可从NLTK网站免费在线获取。它通常用作NLTK库和Python编程的介绍。 Wordlist Corpus或Roget的Thesaurus Corpus可能很有用。还有检测语言文本的方法。对于混合语言案例,不确定它是如何工作的。

答案 2 :(得分:2)

此离线解决方案使用pyenchant拼写检查模块:

# -*- coding: utf-8 -*
import enchant
dictionary = enchant.Dict("en_US")

paragraph = u"This is paragraph in English. 这是在英国段。Это пункт на английском языке. این بند در زبان انگلیسی است."

words = paragraph.split(" ")
en_count = 0.0
for word in words:
  if dictionary.check(word.strip()):
    en_count += 1

percent = en_count/len(words) if len(words) != 0 else 0
print str(percent) + "% english words"

<强>输出:

31.25% english words

答案 3 :(得分:0)

如果您用拉丁字母书写的所有单词均为英文,则可以使用正则表达式。