2015-04-03 88 views
2

我已标记的一个简单的句子,这是我的代码:编辑配置文件

package tagger; 

import edu.stanford.nlp.tagger.maxent.MaxentTagger; 

public class myTag { 

public static void main(String[] args) { 

    MaxentTagger tagger = new MaxentTagger("D:/tagger/english-bidirectional-distsim.tagger"); 


    String sample = "i go to school by bus"; 

    String tagged = tagger.tagString(sample); 

    System.out.println(tagged); 
} 

} 

这是输出:

Reading POS tagger model from D:/tagger/english-bidirectional-distsim.tagger ... done [3.0 sec]. 
i_LS go_VB to_TO school_NN by_IN bus_NN 

编辑属性文件后它不完全有效果。 例如我已经将标记分隔符更改为(*),但在输出中它仍然打印(_)。

如何在eclipse中使用模型配置文件?在直接props对象

Properties props = new Properties(); 
props.load(new FileReader("path/to/properties")); 
MaxentTagger tagger = new MaxentTagger("D:/tagger/english-bidirectional-distsim.tagger", props); 

您还可以设置属性:

props.setProperty("tagSeparator", "*"); 

NB:

+1

请注意,双向模型[通常不是在实际应用中使用的最佳模型](http://nlp.stanford.edu/software/pos-tagger-faq.shtml#h)。还有其他一些模型为了大幅提高速度而牺牲了少量精度。 – 2015-04-03 12:46:17

回答

1

您可以加载属性文件,并将其传递到最大墒的构造函数,这样的事情,如果你使用原始的属性文件,它会失败,例外如

java.io.FileNotFoundException: /u/nl 
p/data/pos_tags_are_useless/egw4-reut.512.clusters (No such file or directory) 

然后删除archtrainFile属性。

+0

你能解释更多关于第一个解决方案>>虚拟机参数吗? – 2015-04-03 10:27:13

+0

究竟是什么来解释? – 2015-04-03 10:53:23

+0

第二个解决方案工作正常,但我想更改属性文件中的多个参数,所以在这种情况下,第一个解决方案更好。问题是如何将属性文件作为参数传递给程序? – 2015-04-03 11:03:33

0

不用为此编写java代码,您可以使用下载的ZIP文件中包含的bash文件。 提取postagger的ZIP文件后,编辑以下的bash文件:

stanford-postagger.sh

应该有下面这行:

java -mx300m -cp 'stanford-postagger.jar:lib/*' edu.stanford.nlp.tagger.maxent.MaxentTagger -model $1 -textFile $2 

添加一个名为“参数-tagSeparator [YourTag]”-model $ 1“

java -mx300m -cp 'stanford-postagger.jar:lib/*' edu.stanford.nlp.tagger.maxent.MaxentTagger -model $1 -tagSeparator * -textFile $2 

要运行它(确保必要的权限给出):

./stanford-postagger.sh models/model_name.tagger in_filename > out_filename 

瞧!