gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:25:13 27 4
gpt4 key购买 nike

我正在尝试使用 http://code.google.com/p/berkeleyaligner/ 中的 BerkeleyAligner.jar 文件中的字对齐在我自己的java类中。我已经将 .jar 文件添加到我的构建路径中。

edu.berkeley.nlp.wordAlignment.combine.CombinedAligner有什么参数拿?edu.berkeley.nlp.wordAlignment.combine.CombinedAligner 是什么意思?输出?

我拥有的是 2 个已经句子对齐的输入文件;即源文件中第 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);
}
}

例如源文件:

this is the first line in the textfile.
that is the second line.
foo bar likes to eat bar foo.

例如目标文件:

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

最佳答案

实际答案

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

如果是这样,在创建句子对后,您甚至不需要将它们放入 CombinedAligner 中。

您可以从中获得对齐方式:(SentencePair, boolean)。 boolean 值表示是否需要树对齐。

放入构造函数中会自动生成Alignment!就这么简单!

这是我得到代码的地方:http://code.google.com/p/berkeleyaligner/source/browse/trunk/src/edu/berkeley/nlp/wa/mt/Alignment.java

<小时/>

更新

不幸的是,我误解了您的问题,并发布了不相关的回复。

但是,我下载了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;

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

公共(public)抽象类 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)

它在构造函数中使用内部类!?这是糟糕的编程实践。

等等...

我找到了一个单词对齐器! http://code.google.com/p/tdx-nlp/source/browse/trunk/pa2/java/src/cs224n/assignments/WordAlignmentTester.java?r=67

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

关于java - 如何在我自己的java类中使用BerkeleyAligner?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8702724/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com