首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python的unigram

使用python的unigram
EN

Stack Overflow用户
提问于 2011-11-29 22:59:51
回答 2查看 6.7K关注 0票数 0

我正在尝试从一个文本文件生成unigram。但只显示给定文件第一行的二元语法。我想为文件中的所有句子显示unigram。

代码语言:javascript
复制
import string;
import sys;
import tokenize;

f = open("data.txt", 'r');
line=f.readline();
while line:
    line = line.rstrip();
    list = line.split();
    for word in list:
         print word
    line = f.readline();

为什么它没有显示句子的一元语法,以及我如何将其转换为二元语法?

提前谢谢。

data.txt是包含句子的文本文件。它有两句话-

代码语言:javascript
复制
        Hello world this is a test code
        today is 29th november 2011

我正在获取输出:

代码语言:javascript
复制
    Hello
    world
    this
    is
    a
    test

代码

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-29 23:22:16

这个代码片段有一些明显的问题。

  1. ; of required
  2. 不使用任何导入的模块(即tokenize)。这是有效的,但没有意义。
  3. 文件行上的循环使用while,这是有效的,但很奇怪。

您没有显示文本文件的结构,但我假设每个句子都在单独的一行上(即包含两个句子的文本文件将包含两行)。

我不确定在这种情况下二元语法到底是什么,所以您可能需要替换bigram函数。

代码语言:javascript
复制
from itertools import tee, izip

def bigrams(iterable):
    a, b = tee(iterable)
    next(b, None)
    return izip(a, b)

with open("data.txt", 'r') as f:
    for line in f:
        words = line.strip().split()
        uni = words
        bi = bigrams(words)
        print uni
        print list(bi)
票数 3
EN

Stack Overflow用户

发布于 2011-11-29 23:10:50

首先,如果您使用的是python的最新版本,您可以简单地这样做:for line in f,它比这个readline内容简单得多。此外,您不必在每一行都使用;。只有当您想要在一行中执行多个语句时,才使用它。

下面这几行代码对我来说很好:

代码语言:javascript
复制
f = open("data.txt", 'r')
for line in f:
    for word in line.split():
        print word

要创建这样的二元组就足够了(未经过测试!)

代码语言:javascript
复制
items = line.split()
bigrams = []
for i in xrange(len(items) - 1):
    bigrams.append((items[i], items[i + 1]))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8312935

复制
相关文章

相似问题

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