2

私は大学のグループ プロジェクト用に Pig Latin トランスレータを作成していました (実際にトランスレータを作成する必要はなく、文字列を好きなように操作するだけで、これを選択しました)。

私の翻訳者への入力はラテン語の祈りで、その最初の 2 行は次のとおりです。

credo in unum deum 
patrem omnipotentem 

次のコードでトランスレータを作成しました。

public static void pigLatinify(String fname) throws IOException 
{
    File file = new File("projectdata.txt");

    try 
    {
        Scanner scan1 = new Scanner(file);
        while (scan1.hasNextLine()) 
        {
            Scanner scan2 = new Scanner(scan1.nextLine());
            boolean test2;
            while (test2 = scan2.hasNext())
            {
                String s = scan2.next();
                char firstLetter = s.charAt(0);
                if (firstLetter=='a' || firstLetter=='i' || firstLetter=='o' || firstLetter=='e' || 
                        firstLetter=='u' || firstLetter=='A' || firstLetter=='I' || firstLetter=='O' || 
                        firstLetter=='E' || firstLetter=='U')
                {
                    String output = s + "hay" + " ";
                    System.out.print(output);
                }
                    else
                    {
                        String restOfWord = s.substring(1);
                        String output = restOfWord + firstLetter + "ay" + " ";
                        System.out.print(output);
                    }
                }
                System.out.println("");
            }
            scan1.close();
        } 

        catch (FileNotFoundException e) 
        {
            e.printStackTrace();
        }
    }
}

最初の 2 行は次のように出力され、祈り全体が適切に出力されます。

redocay inhay unumhay eumday 
atrempay omnipotentemhay

ただし、真の豚ラテン語では、単音節の単語は同じままで、最後に「-hay」が追加されるため、「it」は「ithay」になり、「egg」は「egghay」になりますが、多音節の単語には「-way」が追加されますそのため、「アーチェリー」は「アーチェリーウェイ」になり、「エンディング」は「エンディングウェイ」になります。

Java (および私が使用しているスキャナー クラス) が単語が単音節かどうかを検出する方法はありますか?

この時点で、私は初心者のプログラマーに過ぎないことも指摘します。

4

3 に答える 3

0

あなたがそれをきちんとやりたいのなら、あなたは音節のあるラテン語辞書を見つけなければならないでしょう。ラテン語はかなり規則的ですが、例外があります。http://athirdway.com/glossa/などの辞書には韻律分析があります

crēdo, dĭdi, dĭtum

ただし、一度に使用できるのは1単語だけです。また、音節のパーサーを作成する必要があります。私はこれについて言及します。なぜなら、人々は言語を解析して解釈するのが簡単だからです-彼らは通常そうではありません!

于 2012-11-15T13:15:57.087 に答える
0

あなたの困難は Java を書くことにあるとは思いませんが、単語の音節を数えるための誰にでもできるルールを確立することにあると思います。あなたの言語では、単語の連続する母音ごとに 1 つの音節を数えたいと思いますがe、音節の証拠として終端を数えません。

そう、

eat音節は 1 つ、母音は 1 つだけです。

ate母音の連続が 1 つ、2 つあり、終端の母音は 1 つ少ないe

eight音節が 1 つある

eighteen二つ持ってる

funicular4つ持っています

この単純な一連のルールの反例を見つけることができると確信していますが、おそらくそれらはあなたを始めるのに十分です.

于 2012-11-15T13:00:33.417 に答える
0

次のように音節の数を取得するのはどうですか:

/**
 * Get the number of syllables for a given word
 * @param s the given word
 * @return the number of syllables
 */
public static int getNumberOfSyllables(String s) {
    s = s.trim();
    if (s.length() <= 3) {
        return 1;
    }
    s = s.toLowerCase();
    s = s.replaceAll("[aeiouy]+", "a");
    s = "x" + s + "x";
    return s.split("a").length - 1;
}
于 2012-11-15T13:34:44.590 に答える