首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

数频
EN

Stack Overflow用户
提问于 2016-03-22 14:24:40
回答 1查看 5.1K关注 0票数 4

我使用这个Python脚本使用ngram将文本拆分为后续单词:

代码语言:javascript
运行
复制
from nltk.util import ngrams

sentence = open('text.txt', "r")
n = 2
sixgrams = ngrams(sentence.read().split(), n)

for grams in sixgrams:
      print (grams)

现在我面临以下两个问题。

1。我的结果是这样的

代码语言:javascript
运行
复制
('\xd1\x8e\xd0\xbc', '\xd0\xb1\xd0\xb0\xd0\xb9\xd0\xb3\xd0\xb0\xd0\xb0\xd0\xbd')

这可能是因为text.txt文件有俄语西里尔字母,并以UTF-8编码.有没有办法用Python以人类可读的格式查看我的结果?

2。我尝试使用Collections.Counter获取每个后续单词组合的频率计数,并打印出超过2次(按值排序)的所有ngram。我试了好几个小时,不能让它表现出我想要的样子。

输入示例:

代码语言:javascript
运行
复制
Diddle  diddle  dumpling  my son Diddle  diddle my son

输出示例:

代码语言:javascript
运行
复制
Diddle diddle  2
diddle dumpling 2
dumpling my 1
my son 2
son Diddle 1
Diddle my 1
my son 1

输出限制为2的示例:

代码语言:javascript
运行
复制
Diddle diddle  2
diddle dumpling 2
my son 2
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-22 14:43:23

关于您问题的第一部分,据我所见,您是从UTF-8编码的文件中读取的。可以对结果数据调用decode('utf8')来对其进行解码。为了打印结果,假设您的终端可以处理它,请再次使用encode('utf8')将其转换为可读字符串。

至于问题的第2部分,我已经扩展了您的代码,并包含了一个Counter

代码语言:javascript
运行
复制
from nltk.util import ngrams
import collections

with open("text.txt", "rU") as f:
    sixgrams = ngrams(f.read().decode('utf8').split(), 2)

result = collections.Counter(sixgrams)
print result
with open("output.txt", "w") as f:
    for item, count in sorted(result.iteritems()):
        if count >= 2:
            text = "{} {}".format(" ".join(item).encode('utf8'), count)
            print text
            print >>f, text

对于示例文本文件,输出如下:

代码语言:javascript
运行
复制
Counter({('Diddle', 'diddle'): 2, ('my', 'son'): 2, ('dumpling', 'my'): 1, ('son', 'Diddle'): 1, ('diddle', 'dumpling'): 1, ('diddle', 'my'): 1})
Diddle diddle 2
my son 2

这也适用于包含umlauts的文件:

代码语言:javascript
运行
复制
Counter({(u'D\xf6ddle', u'diddle'): 2, (u'my', u'son'): 2, (u'dumpling',u'my'): 1, (u'diddle', u'dumpling'): 1, (u'son', u'D\xf6ddle'): 1, (u'diddle', u'my'): 1})
Döddle diddle 2
my son 2

编辑:我添加了代码以将输出保存到output.txt文件中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36157054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档