簡體   English   中英

建議使用Java創建翻譯器

[英]Advise to create a translator in Java

我想做一個翻譯,例如:英語譯成西班牙語。

我想翻譯帶有地圖的大文本進行翻譯。

HashMap <String, Object> hashmap = new HashMap <String, Object>();
hashmap.put("hello", "holla"); 
.
.
.

我應該使用女巫對象來處理1000個單詞的初始文本嗎? 一個String或StringBuilder很好嗎?

我該如何進行大替換 如果不對每個單詞與地圖的每個元素進行迭代

我不想接受字符串中的每個單詞,然后看到地圖中有一個匹配項

也許是帶有單詞首字母的多圖?

如果您有任何答案或建議,謝謝

這是一個示例實現:

import java.io.*;
import java.util.*;

public class Translator {

    public enum Language {
        EN, ES
    }

    private static final String TRANSLATION_TEMPLATE = "translation_%s_%s.properties";
    private final Properties translations = new Properties();

    public Translator(Language from, Language to) {
        String translationFile = String.format(TRANSLATION_TEMPLATE, from, to);
        try (InputStream is = getClass().getResourceAsStream(translationFile)) {
            translations.load(is);
        } catch (final IOException e) {
            throw new RuntimeException("Could not read: " + translationFile, e);
        }
    }

    private String[] translate(String text) {
        String[] source = normalizeText(text);
        List<String> translation = new ArrayList<>();
        for (String sourceWord : source) {
            translation.add(translateWord(sourceWord));
        }
        return translation.toArray(new String[source.length]);
    }

    private String translateWord(String sourceWord) {
        Object value = translations.get(sourceWord);
        String translatedWord;
        if (value != null) {
            translatedWord = String.valueOf(value);
        }
        else {
            // if no translation is found, add the source word with a question mark
            translatedWord = sourceWord + "?";
        }
        return translatedWord;
    }

    private String[] normalizeText(String text) {
        String alphaText = text.replaceAll("[^A-Za-z]", " ");
        return alphaText.split("\\s+");
    }

    public static void main(final String[] args) {
        final Translator translator = new Translator(Language.EN, Language.ES);
        System.out.println(Arrays.toString(translator.translate("hello world!")));
    }
}

並在您的類路徑(例如src / main / resources)上放置一個名為“ translation_EN_ES.properties”的文件,其內容如下:

hello=holla
world=mundo

如果您掌握了所有單詞,則可以輕松創建Regex Trie。
然后在運行時,編譯一次正則表達式。 那你很好。

要創建正則表達式,請在此處下載並安裝RegexFormat 5。

從主菜單中,選擇“ 工具”->“正則表達式的字符串”-“三元樹”
將列表粘貼到輸入框中,然后按“ 生成”按鈕。
它吐出一個完整的正則表達式Trie,它與任何哈希查找一樣快。

將來自該對話框的壓縮輸出復制到Rxform選項卡(mdi)窗口中。
右鍵單擊窗口以獲取上下文菜單,選擇“ 雜項實用程序”->“換行”
將其設置為大約60個字符的寬度,然后按OK。

接下來,從Windows工具欄上按C ++按鈕調出MegaString
對話。 單擊使C樣式的字符串行Catenated-1,然后按確定。
將結果復制並粘貼到Java源代碼中。

在帶有回調的全部替換中使用正則表達式。
在回調中,將match用作哈希表的鍵,以返回
翻譯替換。

它很簡單,只需一遍,哦,太快了。

有關該工具的更極端示例,請參閱 130,000個單詞詞典的正則表達式。

字母X的樣本

"(?:x(?:anth(?:a(?:m|n|te(?:s)?)|e(?:in|ne)|i(?:an|"
"c|n(?:e)?|um)|o(?:ma(?:s|ta)?|psia|us|xyl))|e(?:be"
"c(?:s)?|n(?:arthral|i(?:a(?:l)?|um)|o(?:biotic|cry"
"st(?:s)?|g(?:amy|enous|raft(?:s)?)|lith(?:s)?|mani"
"a|n|ph(?:ile(?:s)?|ob(?:e(?:s)?|ia|y)|ya)|time))|r"
"(?:a(?:fin(?:s)?|n(?:sis|tic)|rch|sia)|ic|o(?:derm"
"(?:a|i(?:a|c))|graphy|m(?:a(?:s|ta)?|orph(?:s)?)|p"
"h(?:agy|ily|yt(?:e(?:s)?|ic))|s(?:is|tom(?:a|ia))|"
"t(?:es|ic))))|i(?:pho(?:id(?:al)?|pag(?:ic|us)|sur"
"an))?|oan(?:a|on)|u|y(?:l(?:e(?:m|n(?:e(?:s)?|ol(?"
":s)?))|i(?:c|tol)|o(?:carp(?:s)?|g(?:en(?:ous)?|ra"
"ph(?:s|y)?)|id(?:in)?|l(?:ogy|s)?|m(?:a(?:s)?|eter"
"(?:s)?)|nic|ph(?:ag(?:an|e(?:s)?)|on(?:e(?:s)?|ic)"
")|rimba(?:s)?|se|tomous)|yl(?:s)?)|st(?:er(?:s)?|i"
"|o(?:i|s)|s|us)?)))"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM