如何在我自己的java类中使用BerkelyAligner?

如何在我自己的java类中使用BerkelyAligner?,java,text,word,translation,alignment,Java,Text,Word,Translation,Alignment,我正试图在berkelyaligner.jar文件中使用wordalignmenthttp://code.google.com/p/berkeleyaligner/在我自己的java类中。 我已经将.jar文件添加到我的构建路径中 edu.berkeley.nlp.wordAlignment.combine.CombinedAligner采用哪些参数? edu.berkeley.nlp.wordAlignment.combine.CombinedAligner的输出是什么 我有两个已经对齐句子的

我正试图在
berkelyaligner.jar文件中使用wordalignmenthttp://code.google.com/p/berkeleyaligner/
在我自己的java类中。 我已经将.jar文件添加到我的构建路径中

edu.berkeley.nlp.wordAlignment.combine.CombinedAligner
采用哪些参数?
edu.berkeley.nlp.wordAlignment.combine.CombinedAligner
的输出是什么

我有两个已经对齐句子的输入文件;i、 e.源文件第X行中的句子与目标文件第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.目标文件:

Dies ist die erste Textzeile in der Datei.
das ist die zweite Zeile.
foo bar gerne bar foo essen.
实际答案

您只是想对齐文本(来自目标文件和源文件),对吗

如果是这样,在创建一个句子对之后,您甚至不需要将它们放在组合对齐器中

您可以从中获得对齐:
(语句对,布尔值)
。如果需要树对齐,则布尔值为

将其放入构造函数将自动生成对齐! 太简单了

这就是我得到代码的地方:


更新

不幸的是,我误解了你的问题,并发布了一个不相关的回复

但是,我下载了jar文件,找到了CombinedAligner.class,然后

以下是我得到的:

包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
是抽象的,所以不能实例化它。我不知道什么是
。有些东西是
,因为没有静态方法或字段

然而,我认为您想要的是
对齐句子对(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
您可以使用这些,而不是
组合对齐符
,并将两个句子作为
句子对插入


检查之后,我意识到
WordAligner
也是抽象的

package edu.berkeley.nlp.wordAlignment;
导入edu.berkeley.nlp.mt.Alignment; 导入edu.berkeley.nlp.mt.SentencePair; 导入fig.basic.LogInfo; 导入java.io.Serializable; 导入java.util.ArrayList; 导入java.util.HashMap; 导入java.util.Iterator; 导入java.util.List; 导入java.util.Map

公共抽象类WordAligner实现可序列化{

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
的一个子类不是: edu.berkeley.nlp.wordAlignment.EMWordAligner

然而,构造函数真的很奇怪

public EMWordAligner (SentencePairState$Factory, Evaluator, boolean)
它在构造函数中使用内部类!?这是糟糕的编程实践

等等

我找到了一个单词对齐器!

也许这会有帮助,你可以用它来解决你的问题。

实际答案

您只是想对齐文本(来自目标文件和源文件),对吗

如果是这样,在创建一个句子对之后,您甚至不需要将它们放在组合对齐器中

您可以从中获得对齐:
(语句对,布尔值)
。如果需要树对齐,则布尔值为

将其放入构造函数将自动生成对齐! 太简单了

这就是我得到代码的地方:


更新

不幸的是,我误解了你的问题,并发布了一个不相关的回复

但是,我下载了jar文件,找到了CombinedAligner.class,然后

以下是我得到的:

包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
是抽象的,所以不能实例化它。我不知道什么是
。有些东西是
,因为没有静态方法或字段

然而,我认为您想要的是
对齐句子对(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
您可以使用这些,而不是
组合对齐符
,并将两个句子作为
句子对插入


检查之后,我意识到
WordAligner
也是抽象的

package edu.berkeley.nlp.wordAlignment;
导入edu.berkeley.nlp.mt.Alignment; 导入edu.berkeley.nlp.mt.SentencePair; 导入fig.basic.LogInfo; 导入java.io.Serializable; 导入java.util.ArrayList; 导入java.util.HashMap; 导入java.util.Iterator; 导入java.util.List; 导入java.util.Map

公共抽象类WordAligner实现可序列化{

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
的一个子类不是: edu.berkeley.nlp.wordAlignment.EMWordAligner

然而,构造函数真的很奇怪

public EMWordAligner (SentencePairState$Factory, Evaluator, boolean)
它在构造函数中使用内部类!?这是糟糕的编程实践

等等

我找到了一个单词对齐器!


也许这会有帮助,您可以解决您的问题。

我的意思是在IDE中,
edu.berkeley.nlp.wordAlignment.combine.CombinedAligner
应该采用哪些参数?哦。很抱歉我误解了你的问题。现在这是个谜
wordalignerhardinon(wordalignerwa1,wordalignerwa2)
wordalignerhardinon.java
中,但我仍然无法实例化
wordalignerwa1
。我将查看它@2er0。子类
wordalignerhardinion
takes