0

嗨,这些天我开始玩 Python,这似乎很容易,所以我在 Python 的 nltk 中找到了语料库。当我尝试

text1.concordance("Moby")

它给了我句子的数量和包含单词 Moby,cool 的句子的显示。

所以我试图测试我是否能找到所有名字为 Moby 和 Ahab 的句子,但遗憾的是我得到了错误。

我做错了什么还是应该能够得到包含这两个名字的所有句子?我应该使用 nltk 的另一个功能吗?哦

这可能很容易,但对我来说并不那么容易看到它...希望有人能提供帮助,谢谢。

PS:如果我需要写一些代码,一个例子会很棒。^^

编辑:由于有人要求错误,我也会编写我编写的代码。

import nltk
from nltk.book import *

text1.concordance("Moby","Ahab")

给我错误:

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    text1.concordance('Moby','Ahab')
  File "C:\Programmering\Python27\lib\site-packages\nltk\text.py", line 314, in concordance
    self._concordance_index.print_concordance(word, width, lines)
  File "C:\Programmering\Python27\lib\site-packages\nltk\text.py", line 174, in print_concordance
    half_width = (width - len(word) - 2) / 2
TypeError: unsupported operand type(s) for -: 'str' and 'int'

我猜想我会得到一些比赛,比如跑步:

text1.concordance("Moby")

我有 84 场比赛。

4

2 回答 2

0

你不能用concordance. 它只接受一个单词并打印出结果。没有(合理的)方法可以将它们作为列表获取,因此您无法进一步过滤它们。问题是,Text后面的对象text1,只适合简单的交互式探索——我一直不明白为什么nltk书是用它开头的。所以忘了Text,跳过本章的其余部分,直接进入第 2 章。Moby Dick 是gutenberg语料库的一部分,所以你可以遍历它的句子并得到你的答案,如下所示:

from nltk.corpus import gutenberg
for s in gutenberg.sents('melville-moby_dick.txt'):
    if 'Ahab' in s and 'Moby' in s:
        print " ".join(s)
于 2012-04-28T12:44:03.787 回答
-1

您可以列出所有您想要与之一致的名称,例如:

name_list = ['Moby', 'Ahab']

这样做的代码是:

import nltk
from nltk.book import *
name_list = ['Moby', 'Ahab']
for name in name_list: 
    text1.concordance(name)
于 2016-09-07T08:32:03.173 回答