我正在尝试在我自己的java类中使用来自http://code.google.com/p/berkeleyaligner/
的BerkeleyAligner.jar文件中的wordalignment。
我已经将.jar文件添加到了我的buildpath中。
edu.berkeley.nlp.wordAlignment.combine.CombinedAligner
采用什么参数?
edu.berkeley.nlp.wordAlignment.combine.CombinedAligner
输出是什么?
我所拥有的是2个已经句子对齐的输入文件;即来自sourceFile的第X行的句子与targetFile的第X行的句子相同(但使用的语言不同)。
import edu.berkeley.*;
import edu.berkeley.nlp.wa.mt.Alignment;
import edu.berkeley.nlp.wa.mt.SentencePair;
public class TestAlign {
BufferedReader brSrc = new BufferedReader(new FileReader ("sourceFile"));
BufferedReader brTrg = new BufferedReader(new FileReader ("targetFile"));
String currentSrcLine;
while ((currentSrcLine = brSrc.readLine()) !=null) {
String currentTrgLine = brTrg.readline();
// Reads into BerkeleyAligner SentencePair format.
SentencePair src2trg = new SentencePair(sentCounter, params.get("source"),
Arrays.asList(srcLine.split(" ")), Arrays.asList(trgLine.split(" ")));
// How do i call the BerkeleyAligner??
// -What parameters does the CombinedAligner takes?
// -What does the function/class returns?
// I assume it returns a list of strings.
// Is there a class in BerkeleyAligner to read the output?
// Please provide some example, thank you!!
Alignment output = edu.berkeley.nlp.wordAlignment.combine.CombinedAligner
.something.something(currentSrcLine, currentTrgLine);
}
}
e.g。的资源文件:
this is the first line in the textfile.
that is the second line.
foo bar likes to eat bar foo.
e.g。的TargetFile:
Dies ist die erste Textzeile in der Datei.
das ist die zweite Zeile.
foo bar gerne bar foo essen.
答案 0 :(得分:1)
实际答案
您只想对齐文本(来自目标文件和源文件),对吧?
如果是这样,在创建句子对之后,您甚至不需要将它们放在CombinedAligner
中。
你可以从中获得一个对齐:(SentencePair, boolean)
。布尔值是你想要树对齐。
将它放入构造函数中会自动生成一个Alignment! 这么简单!
<强>更新强>
不幸的是,我误解了你的问题,并发布了无关紧要的回复。
但是,我下载了jar文件,找到了CombinedAligner.class和decompiled it。
这是我得到的:
包edu.berkeley.nlp.wordAlignment.combine;
import edu.berkeley.nlp.mt.Alignment;
import edu.berkeley.nlp.mt.SentencePair;
import edu.berkeley.nlp.wordAlignment.PosteriorAligner;
import edu.berkeley.nlp.wordAlignment.WordAligner;
import fig.basic.Fmt;
import fig.basic.ListUtils;
import java.util.ArrayList;
import java.util.List;
public abstract class CombinedAligner extends PosteriorAligner {
private static final long serialVersionUID = 1;
WordAligner wa1;
WordAligner wa2;
public CombinedAligner (WordAligner, WordAligner)
public String getName()
public Alignment alignSentencePair(SentencePair)
public List alignSentencePairReturnAll(SentencePair)
public void setThreshold(int)
abstract Alignment combineAlignments(Alignment, Alignment, SentencePair)
}
您使用的Alignment
课程似乎是edu.berkeley.nlp.mt.Alignment
。
无论如何,CombinedAligner
是抽象的,所以你无法实例化它。而且我不知道.something
是什么,因为没有静态方法或字段。
我认为你想要的是alignSentencePair(SentencePair)
。
要实现这一点,您需要使用CombinedAligner
的子类,因为CombinedAligner
是抽象的。
所以,在浏览文件后,我找到了这些子类:
edu.berkeley.nlp.wordAlignment.combine.HardUnion
edu.berkeley.nlp.wordAlignment.combine.HardIntersect
edu.berkeley.nlp.wordAlignment.combine.SoftUnion
edu.berkeley.nlp.wordAlignment.combine.SoftIntersect
您可以使用这些代替CombinedAligner
,并将您的两个句子插入SentencePair
!
经过检查,我意识到WordAligner
也是抽象的!
package edu.berkeley.nlp.wordAlignment;
import edu.berkeley.nlp.mt.Alignment; import edu.berkeley.nlp.mt.SentencePair; import fig.basic.LogInfo; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map;
公共抽象类WordAligner实现Serializable {
private static final long serialVersionUID = 1;
protected String modelPrefix;
public WordAligner ()
public abstract String getName()
public void setThreshold(double)
public Alignment alignSentencePair(SentencePair)
public Map alignSentencePairs(List)
public Alignment thresholdAlignment(Alignment, double)
public String getModelPrefix()
public String toString()
}
我找到了一个子类:
edu.berkeley.nlp.wordAlignment.IterWordAligner
不幸的是,这仍然是抽象的。
但是IterWordAligner
的子类不是:{0}
edu.berkeley.nlp.wordAlignment.EMWordAligner
然而,构造函数真的很奇怪。
public EMWordAligner (SentencePairState$Factory, Evaluator, boolean)
它在CONSTRUCTOR中使用INNER CLASS!?这是一个糟糕的编程实践。
WAIT
我发现了一个字对齐器! http://code.google.com/p/tdx-nlp/source/browse/trunk/pa2/java/src/cs224n/assignments/WordAlignmentTester.java?r=67 强>
也许这有帮助,你可以用它来解决你的问题。