Nlp Can';t将制表符分隔的文件输入到Stanford分类器

Nlp Can';t将制表符分隔的文件输入到Stanford分类器,nlp,stanford-nlp,tab-delimited,Nlp,Stanford Nlp,Tab Delimited,我在将制表符分隔的文件输入到中时遇到问题 虽然我能够成功地浏览所有包含的斯坦福教程,包括新闻组教程,但当我尝试输入自己的培训和测试数据时,它无法正确加载 起初,我认为问题在于我使用Excel电子表格将数据保存到一个以制表符分隔的文件中,这是某种编码问题 但是当我做下面的事情时,我得到了完全相同的结果。首先,我将下面的演示数据输入到gedit中,确保在政治/体育类和随后的文本之间使用一个选项卡: politics Obama today announced a new immigratio

我在将制表符分隔的文件输入到中时遇到问题

虽然我能够成功地浏览所有包含的斯坦福教程,包括新闻组教程,但当我尝试输入自己的培训和测试数据时,它无法正确加载

起初,我认为问题在于我使用Excel电子表格将数据保存到一个以制表符分隔的文件中,这是某种编码问题

但是当我做下面的事情时,我得到了完全相同的结果。首先,我将下面的演示数据输入到gedit中,确保在政治/体育类和随后的文本之间使用一个选项卡:

politics    Obama today announced a new immigration policy.
sports  The NBA all-star game was last weekend. 
politics    Both parties are eyeing the next midterm elections.
politics    Congress votes tomorrow on electoral reforms.
sports  The Lakers lost again last night, 102-100.
politics    The Supreme Court will rule on gay marriage this spring.
sports  The Red Sox report to spring training in two weeks.
sports  Messi set a world record for goals in a calendar year in 2012.
politics    The Senate will vote on a new budget proposal next week.
politics    The President declared on Friday that he will veto any budget that doesn't include revenue increases.

好消息是:这实际上运行时没有抛出任何错误

坏消息是:由于它没有提取任何特征,它实际上无法估计真实的模型,每个项目的概率默认为
1/n
,其中
n
是类的数量

因此,我运行了相同的命令,但指定了两个基本选项:
java -mx1800m -cp stanford-classifier.jar edu.stanford.nlp.classify.ColumnDataClassifier 
-trainFile myproject/demo-train.txt -testFile myproject/demo-test.txt -2.useSplitWords =2.splitWordsRegexp "\s+"

令人惊讶的是,这次没有抛出java异常。但同样,它毫无价值:它将整个文件视为一个观察结果,因此无法正确拟合模型

我已经花了8个小时在这个问题上,用尽了我能想到的一切。我是Java新手,但我认为这不应该是一个问题——根据斯坦福大学的for
ColumnDataClassifier
,所需要的只是一个以制表符分隔的文件

任何帮助都将不胜感激



最后一点注意:我在Windows和Ubuntu上用相同的文件运行了相同的命令,结果都是一样的

我遇到了和你一样的错误

注意要分类的文本中的选项卡

Caused by: java.lang.ArrayIndexOutOfBoundsException: 2
这意味着,在用制表符拆分字符串之后,分类器在某一点上需要3个元素的数组


我运行了一个方法,计算每行的制表符数量,如果某行没有两个制表符,则出现错误。

使用属性文件。在这个例子中

第3、4和5行开头的数字2表示tsv文件中的列。所以在你的情况下,你会使用

trainFile=20news-bydate-devtrain-stanford-classifier.txt
testFile=20news-bydate-devtest-stanford-classifier.txt
1.useSplitWords=true
1.splitWordsTokenizerRegexp=[\\p{L}][\\p{L}0-9]*|(?:\\$ ?)?[0-9]+(?:\\.[0-9]{2})?%?|\\s+|[\\x80-\\uFFFD]|.
1.splitWordsIgnoreRegexp=\\s+
或者如果要使用命令行参数运行

java -mx1800m -cp stanford-classifier.jar edu.stanford.nlp.classify.ColumnDataClassifier -trainFile myproject/demo-train.txt -testFile myproject/demo-test.txt -1.useSplitWords =1.splitWordsRegexp "\s+"

为了帮助您,我希望复制您的问题,我很抱歉向您询问更多信息,因为您已经提供了这么多信息。:)但是你在这里学习的教程在哪里?我想我需要demo-train.txt和demo-test.txt来复制这个。谢谢,谢谢@dmn。你可以找到这些文件,它是一个包含我的演示文件的zip文件,我真正想要使用的文件,以及有效的教程文件。本教程本身位于第页。非常感谢您的关注。
Caused by: java.lang.ArrayIndexOutOfBoundsException: 2
trainFile=20news-bydate-devtrain-stanford-classifier.txt
testFile=20news-bydate-devtest-stanford-classifier.txt
2.useSplitWords=true
2.splitWordsTokenizerRegexp=[\\p{L}][\\p{L}0-9]*|(?:\\$ ?)?[0-9]+(?:\\.[0-9]{2})?%?|\\s+|[\\x80-\\uFFFD]|.
2.splitWordsIgnoreRegexp=\\s+
trainFile=20news-bydate-devtrain-stanford-classifier.txt
testFile=20news-bydate-devtest-stanford-classifier.txt
1.useSplitWords=true
1.splitWordsTokenizerRegexp=[\\p{L}][\\p{L}0-9]*|(?:\\$ ?)?[0-9]+(?:\\.[0-9]{2})?%?|\\s+|[\\x80-\\uFFFD]|.
1.splitWordsIgnoreRegexp=\\s+
java -mx1800m -cp stanford-classifier.jar edu.stanford.nlp.classify.ColumnDataClassifier -trainFile myproject/demo-train.txt -testFile myproject/demo-test.txt -1.useSplitWords =1.splitWordsRegexp "\s+"