擅长:python、mysql、java
<p>使用参数encoding='utf-8'调用PlaintextCorpusReader:</p>
<pre><code>ptcr = nltk.corpus.PlaintextCorpusReader(Corpus, '.*', encoding='utf-8')
</code></pre>
<p>编辑:我明白了。。。这里有两个不同的问题:</p>
<p>a)标记化问题:当您使用德语文本字符串进行测试时,
你认为你是
正在输入unicode。实际上,您告诉python取字节
在引号之间并将其转换为unicode字符串。但是你的字节
被曲解了。修正:在你的
源文件。</p>
<pre><code># -*- coding: utf-8 -*-
</code></pre>
<p>突然间,你的常量将被正确地看到和标记:</p>
<pre><code>german = u"Veränderungen über einen Walzer"
print nltk.tokenize.WordPunctTokenizer().tokenize(german)
</code></pre>
<p>第二个问题:原来<code>Text()</code>不使用unicode!如果你
传递一个unicode字符串,它将尝试将其转换为纯ascii
字符串,这当然会在非ascii输入时失败。呃。</p>
<p>解决方案:我的建议是避免完全使用<code>nltk.Text</code>,直接使用语料库阅读器。(这通常是一个好主意:参见<code>nltk.Text</code>自己的文档)。</p>
<p>但是,如果您必须对德语数据使用<code>nltk.Text</code>,请阅读
正确地对数据进行标记,然后将unicode“编码”回<code>str</code>列表。对于德国人来说
也许只使用拉丁-1编码是最安全的,但是utf-8似乎可以工作
我也是。</p>
<pre><code>ptcr = nltk.corpus.PlaintextCorpusReader(Corpus, '.*', encoding='utf-8');
# Convert unicode to utf8-encoded str
coded = [ tok.encode('utf-8') for tok in ptcr.words(DocumentName) ]
words = nltk.Text(coded)
</code></pre>