2012-01-02 11 views
1

私は自分のJavaクラスのhttp://code.google.com/p/berkeleyaligner/からBerkeleyAligner.jarファイルのwordalignmentを使用しようとしています。 私はすでにビルドパスに.jarファイルを追加しています。自分のJavaクラスでBerkeleyAlignerを使用するには?

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); 
    } 
} 

sourceFile:

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

このtargetFile:あなたはちょうど、(ターゲットファイルとソースファイルから)のテキストを揃えたかった

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

答えて

1

実際の回答

もしそうなら、文のペアを作成した後で、それをCombinedAlignerに入れる必要はありませんでした。

アライメント:(SentencePair, boolean)から取得できます。ブール値は、ツリーの整列が必要な場合です。

コンストラクタに配置すると、自動的にアライメントが生成されます。 それで簡単!私はコードだところ

これはされていますhttp://code.google.com/p/berkeleyaligner/source/browse/trunk/src/edu/berkeley/nlp/wa/mt/Alignment.java


UPDATE

を残念ながら、私はあなたの質問を誤解し、無関係なレスポンスを投稿しました。

しかし、私は、CombinedAligner.classと、decompiled itを見つけたjarファイルをダウンロードしました。

は、ここで私が得たものです:

パッケージ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として、あなたの2つの文を挿入することができます。

だから、ファイルの周り突っついた後、私はこれらのサブクラスを見つけました!


チェックの後、WordAlignerも抽象的なことに気付きました!

package edu.berkeley.nlp.wordAlignment; 

import edu.berkeley.nlp.mt.Alignment; import edu.berkeley.nlp.mt.SentencePair; インポート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がシリアライズ{

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) 

コンストラクタ内のINNER CLASSを使用していますか?それはひどいプログラミングの実践です。

WAIT ...

私はワードアライナを見つけました! http://code.google.com/p/tdx-nlp/source/browse/trunk/pa2/java/src/cs224n/assignments/WordAlignmentTester.java?r=67

おそらくそれが役に立ち、問題を解決することができます。

+0

IDE内で、 'edu.berkeley.nlp.wordAlignment.combine.CombinedAligner'にはどのようなパラメータが必要ですか? – alvas

+0

ああごめんなさい。私はあなたの質問を誤解しました。 – eboix

+0

私は自分の答えを更新しました@ 2er0。 – eboix

関連する問題