使用 Python、NLTK 分析德语文本

问题描述

我是 Python 的初学者,目前正在尝试使用 NLTK 来分析德语文本(提取德语名词及其德语文本的频率),请参考本教程:https://datascience.blog.wzb.eu/2016/07/13/accurate-part-of-speech-tagging-of-german-texts-with-nltk/

在此过程中我遇到了几个问题,但我无法解决

当我按照网站执行以下代码时:

import random

tagged_sents = list(corp.tagged_sents())
random.shuffle(tagged_sents)
split_perc = 0.1
split_size = int(len(tagged_sents) * split_perc)
train_sents,test_sents = tagged_sents[split_size:],tagged_sents[:split_size]

它出来了

Traceback (most recent call last):
  File "test2.py",line 7,in <module>
    tagged_sents = list(corp.tagged_sents())
  File "C:\Users\User\anaconda3\lib\site-packages\nltk\corpus\reader\conll.py",line 130,in tagged_sents
    return LazyMap(get_tagged_words,self._grids(fileids))
  File "C:\Users\User\anaconda3\lib\site-packages\nltk\corpus\reader\conll.py",line 215,in _grids
    return concat(
  File "C:\Users\User\anaconda3\lib\site-packages\nltk\corpus\reader\util.py",line 433,in concat
    raise ValueError("concat() expects at least one object!")
ValueError: concat() expects at least one object!

然后我尝试按照此解决方案进行修复 https://teamtreehouse.com/community/randomshuffle-crashes-when-passed-a-range-somenums-randomshufflerange5250

并改变 tagged_sents = list(corp.tagged_sents())

tagged_sents = list(range(5,250))

而且 ValueError 没有出来,我不知道 (5,250) 是什么意思,虽然我已经阅读了说明。

那我继续执行下面的步骤

from ClassifierBasedGermanTagger.ClassifierBasedGermanTagger import ClassifierBasedGermanTagger
tagger = ClassifierBasedGermanTagger(train=train_sents) 

然后显示

Traceback (most recent call last):
  File "test1.py",line 90,in <module>
    from ClassifierBasedGermanTagger.ClassifierBasedGermanTagger import ClassifierBasedGermanTagger
ModuleNotFoundError: No module named 'ClassifierBasedGermanTagger' 

我已经下载了ClassifierBasedGermanTagger.py和init.py并将它们放在链接到VS CODE的文件夹中,不知道是否正确,如文中所说:>

'使用他的 Python 类 ClassifierBasedGermanTagger(您可以从 github 页面下载),我们可以创建一个标记器并使用来自 TIGER 语料库的数据对其进行训练:'

请帮我解决这些问题,谢谢!

解决方法

首先,欢迎来到 StackOverflow!在发布问题之前,请确保您已经完成了自己的研究,并且大部分时间都可以解决问题。

其次,import pandas as pd import patsy as pt import numpy as np df = pd.DataFrame({ 'y':[0,1,1],'x':np.arange(0,8,2),'k': [1,2,2] }) print(df.dtypes) pt.dmatrices( 'y ~ x + (1+x|k)',data=df ) 是 Python 中一个非常基本的函数,用于根据输入获取数字列表,我认为像您那样使用它不会解决问题。我建议您使用 range(start,end) 来查看 print 中填充的数据类型,然后从那里开始调试。也许 corp 只是空的,这就是为什么你没有得到任何 corp

对于导入部分,我不清楚您将 tagged_sents 放在哪里,但无论它在哪里,您的代码都看不到它。您可以尝试将您的代码 (ClassifierBasedGermanTagger.py) 和 test2.py 放在同一目录中。有关如何在 Python 中正确导入模块的更多详细信息,请阅读以下链接。

https://docs.python.org/3/reference/import.html