zoukankan      html  css  js  c++  java
  • 【转载】粤语翻译工具

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.util.ArrayList;
    import java.util.List;

    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextArea;
    import javax.swing.border.TitledBorder;

    /**
    * 粤语转换工具
    *
    @author tiger
    * @date 2011-04-13
    *
    * 选中上面框中的词语,可同步在下框中显示出翻译出的词语。
    */
    public class Yueyu {

    private static List<String> putongs = new ArrayList<String>();
    private static List<String> yues = new ArrayList<String>();

    static{

    add(
    "", "");
    add(
    "", "");
    add(
    "", "");

    add(
    "", "");
    add(
    "想念", "挂住");
    add(
    "不是", "唔系");
    add(
    "说话", "讲野");

    String yueyu_putonghua
    = "我(我) 你(你) 佢(他) 我哋(我们) 你哋(你们) 佢哋(他们) 人哋(人家) " +
    "呢度(这里) 嗰度(那里) 边度(哪里) 呢(这) 嗰(那) 咁样(这样、那样)点解(为什么) 第日(改天) " +
    "第次(下次)乜嘢(什么) 乜(什么) 几多(多少) 边(哪) 咁好(这么好)阿爸(爸爸) 阿妈(妈妈) 阿哥(哥哥) " +
    "阿嫂(嫂嫂) 阿爷(爷爷) 阿嫲(奶奶) 阿公(外公) 阿婆(外婆、老婆婆) 阿叔(叔叔) 老豆(爸爸)! 老妈子(妈妈) " +
    "家姐(姐姐)大佬(哥哥) 细佬(弟弟) 心抱(媳妇) 舅父(舅舅) 孙(孙子) 仔仔(儿子) 女女(女儿) 契爷(干爹) 契仔(干儿子) 寡佬(单身汉) " +
    "仔(儿子) 女(女儿) 后底乸(继母) 太子爷(少东家) 契弟(王八蛋) 老坑(老头) 老嘢(老东西,老家伙) 老姑婆(老处女) 基老(男同性恋者) 老细(老板) " +
    "老千(骗子) 后生仔(年轻小伙子) 后生女(年轻姑娘) 靓仔(漂亮的小伙子) 靓女(漂亮的姑娘) 细路(小孩) 细蚊仔(小孩) " +
    "臊虾(婴儿) 马仔(打手) 事头婆(老板娘)返工(上班) 收工(下班) 揾食(谋生) 人工(工钱) 出粮(发工资) 搞掂(搞妥当) 搞弯(弄糟糕) " +
    "就手(顺利) 捱夜(熬夜) 空姐(飞机女服务员) 钟点工(计时工) 揾工(找工作) 做嘢(干活) 捞边行(搞什么行业) 一脚踢(一人承担) 轮更(轮班) " +
    "看更(看门) 起屋(盖房子) 抓车(驾驶汽车)熟手(老练) 车衫(缝衣服) 夹手夹脚(一起动手) 执头执尾(收拾零碎的东西) 搏命(拼命) 癐(累) " +
    "差池(差错) 撞板(碰钉子) 松人(溜走) 走人(溜走) 炒鱿鱼(解雇) 开OT(加班) 秘捞(兼职) 手信(小礼物) 人客(客人) 生埗(陌生、生疏) " +
    "老友记(老朋友) 仇口(仇人) 托大脚(拍马屁) 危(求) 畀面(给面子) 制(肯) 得闲(有空) 冇几何(不常) 冇相干(没关系) 唔觉意(不留心) " +
    "唔话得(没说的) 倾(谈) 倾偈(聊天) 早晨(早上好) 早唞(晚安) 揾人(找人) 拍拖(谈恋爱) 挂住(想念) 隔篱(隔壁) 掟煲(恋人分手) " +
    "好夹(很合得来) 探(拜访) 讲笑(开玩笑) 羞家(丢脸) 起身(起床) 着(穿) 除(脱) 浪口(漱口) 飞发(理发) 电发(烫发) " +
    "洗面(洗脸) 屙屎(大便) 屙尿(小便)闩门(关门) 熄灯(关灯) 水喉(水龙头) 瞓觉(睡觉) 食(吃) 食晏(吃午餐) 食烟(抽烟) " +
    "滚水(开水) 煲(煮) 焗(焖) 饮胜(干杯) 颈渴(口渴) 餸(下饭的菜) 腍(软) 霄夜(夜宵) 饮(渴) 台(桌子) 梳化(沙发) 雪柜(冰箱) " +
    "傢俬(家具) 皮箧(皮箱) 夹万(保险箱) 刀仔(小刀) 花樽(花瓶) 香枧(香皂) 镬(锅) 咪(麦克风) 插苏(插座) 火水(煤油) 遮(伞) 地拖(拖把) " +
    "电心(电池) 洋烛(蜡烛) 花洒(莲蓬头) 壳(勺子) 番枧(肥皂) 扫把(扫帚) 匙羹(小勺子) 褛(外套) 大褛(大衣) 衫(衣服) " +
    "T恤(针织或棉质上衣) 裤(裤子) 鞋(鞋子) 底衫(内衣) 底裤(内裤) 高争鞋(高跟鞋) 领太(领带) 荷包(钱包) 唇膏(口红)" +
    "头壳(脑袋) 头皮(头屑) 面珠墩(脸蛋儿) 酒凹(酒窝) 下爬(下巴) 眼(眼睛) 眼眉(眉毛) 眼核(眼珠) 耳仔(耳朵) 耳屎(耳垢) 大牙(槽牙) " +
    "鼻哥(鼻子) 鼻哥窿(鼻孔)身子(身体) 心口(胸口) 膊头(肩膀) 毛管(毛孔)罗柚(屁股) 手板(手掌) 手瓜(胳膊) 脚(脚、腿) 背脊(脊背) " +
    "尾龙骨(尾骨) 肚腩(小肚子) 睇医生(看病) 驳骨(接骨头) 联针(缝针) " +
    "埋口(合口) 执药(抓药) 燥火(上火) 好翻(好了) 唔精神(不舒服) 冻亲(着凉) 头赤(头痛) 打冷震(发抖) 打噎(打嗝) 呕血(吐血) 浊亲(被水呛着)";


    String yueyu_putonghua_2
    =
    "岳高头(仰起头)拧头(摇头) 目及 geb6(盯)眯méi1埋眼(闭眼)瞌heb3(闭)啜(嘬,吻)噍(嚼) 唞气(呼吸) 渺嘴(撇嘴) 擘大口(张大口)" +
    "喐手(动手)笃(戳) 笠(套) 弗fit1(鞭打)抰yêng2(抖)揞(蒙,捂)搣mit1(掰)摱man1(攀,扳)掹meng1(拔)豆(碰,摸)掟déng3(扔)抠(掺杂)" +
    "抠乱(搞混了) 抄cao3(搜,翻)挤(放)搦(拿) 捽(揉) 掴(用掌打) 省(擦) 吉(扎,刺)批(削)濑(洒) 枳zed1入去(塞进去)走(跑)走夹唔唞(拼命走) " +
    "标(冲)坎头埋墙(把头撞在墙上,形容人自讨苦吃)企(站) 嗌(叫,喊)嗌交(吵架) 撩(逗)单单打打(说风凉话,含沙射影,讽刺攻击)诈假ga1意yi1(假装)诈娇(撒娇)" +
    "扭拧(扭捏) 睇衰(看不起,看扁) 索气(吸气)揩油、索油(占便宜)攞嚟衰(自讨苦吃) 储储埋埋(攒起来)打交(打架) 打横(横着)打掂(竖着) 打底(垫底)打赤脚(赤着脚)" +
    " 打大赤肋(赤着上身)折堕(做孽,遭遇悲惨)惊géng1(害怕)发姣(卖弄风骚)锡(疼爱)孭(背) 得人惊(令人害怕) 得个吉(一场空) 厄水(骗钱) 邓(替) " +
    "抵(值得) " +
    "翻嚟(回来) 打个冷(转一回) 骑呢(古怪) 揾笨(占人便宜) 典地(撒赖) 碌(滚动) 睇水(把风) 大洗(花钱过度)";

    String yueyu_putonghua_3
    = "钟意(喜欢) 爱锡(疼爱)快活(快乐)得戚(得意洋洋) 嬲nao1(生气)发嬲(生气)笑骑骑(笑哈哈) 笑口噬噬(张开嘴笑)" +
    "笑口吟吟(笑容满面)莲子蓉面口(比喻笑容满面)偷笑(暗笑)熠熟狗头(形容人张开嘴笑,像煮熟的狗头一样)火起(发火)火滚(恼火) 一把火(一肚子火)" +
    "嬲爆爆(气冲冲)眼崛崛(瞪大眼睛,表示不满或生气) 崛(瞪)吹胀(1气坏,2无可奈何)肉赤(心疼)忧心(担心) 心淡(心灰意冷) 唔忿气(不服气)闭翳(发愁) " +
    "喊(哭)喊苦喊忽(哭哭啼啼)苦瓜咁嘅面(像苦瓜那样拉长着脸,比喻愁眉苦脸)谷气(憋气)欢喜(喜欢) 乞人憎(令人讨厌)心思思(老惦念着)心挂挂(牵肠挂肚)" +
    " 心水(心意) 愿(愿意)情愿(宁愿)心多多(三心两意)心喐喐(指动了心想做某事,但还没有行动)特登(故意) 爱(要)激气(心里有气) 专登(特意)失魂(慌张,精神恍惚)" +
    "失魂鱼(形容人惊慌失措如受惊的鱼)心息(死心) 想话(打算)谂住(打算,预计) 心罨(心里悲伤难受)" +
    "心甘(甘心) 乍乍帝(装模作样) 拾下拾下(傻乎乎) 戆居(呆,傻,笨) 凼(哄) 蕉积(嚣张,气焰高涨) 个心嗱住(心里酸溜溜) ";


    String yueyu_putonghua_4
    = "乜(什么) 嘅(的) 嬲(生气)咁(如此) 哋(们) 睇(看) 啲(那些) 冇(没有) 惗(想) 嘎(啊) 咩(什么) 冧(陶醉) 波(球) 雪条(冰棒)" +
    "啱啱(刚刚,刚好) 啱先(刚才) 正话(刚才) 凑啱(恰好) 不溜(一向) 先至(才) 就嚟(就要) 经已(已经) 卒之(终于) 终归(终究) " +
    "终须(终究) 仲(还) 鬼咁(那么) 十分之(十分) 极之(极) 相当之(相当) 非常之(非常) 稍为(稍微) 净(光,只有) 净喺(只是,光是) " +
    "差唔多(差不多) 连气(一连) 亦(也) 又试(又) 但凡(凡是) 逢喺(凡是) 咪mei2(别) 咪住(! 先别) 唔使(不用) 唔好(不好) 唔通(难道) 实(一定)" +
    " 奉旨(肯定) 查实(其实) 是必(必定) 梗(肯定) 一于(就,表示下定决心去做某事) 千祈(千万) 专登(专门,故意) 特登(特地) 好在(幸亏) 直头(直接) " +
    "直情(简直,根本) 同埋(和,同) 一喺(要么) 事关(因为) 固然之(固然) 固之然(固然) " +
    "之不过(不过) 即管(尽管) 唔单只(不但) 不特止(不仅仅) 定(还是) 抑或(或者) 于是乎(于是) 然之后(然后) " +
    "同(和) 为咗(为了) 啫(罢了) 之嘛(罢了) 啩(吧) " ;



    add(yueyu_putonghua);
    add(yueyu_putonghua_2);
    add(yueyu_putonghua_3);
    add(yueyu_putonghua_4);

    }



    /**
    * 添加字库
    *
    @param putonghua
    *
    @param yueyu
    */
    private static void add(String putonghua, String yueyu) {
    putongs.add(putonghua);
    yues.add(yueyu);
    }

    /**
    * 添加字库
    *
    @param str
    */
    private static void add(String str) {
    String temp;
    String putonghua
    = "", yueyu = "";
    boolean isPutong = false;
    for (int i = 0; i < str.length(); i++) {
    temp
    = str.substring(i, i + 1);
    if(temp.equals(" "))
    {
    continue;
    }
    if(temp.equals("("))
    {
    isPutong
    = true;
    }
    else if(temp.equals(")"))
    {
    isPutong
    = false;
    putongs.add(putonghua);
    yues.add(yueyu);

    System.out.println(putonghua
    + " , " + yueyu);

    putonghua
    = "";
    yueyu
    = "";
    }
    else{
    if(isPutong)
    {
    putonghua
    += temp;
    }
    else{
    yueyu
    += temp;
    }
    }
    }
    }


    /**
    * 根据粤语词得到对应普通话
    *
    @param yueyu
    *
    @return
    */
    private static String getPutonghua(String yueyu)
    {
    String result
    = yueyu;
    for (int i = 0; i < yues.size(); i++) {
    if(yues.get(i).equals(yueyu))
    {
    result
    = putongs.get(i);
    }
    }
    return result;
    }

    /**
    * 根据普通话词语得到对应粤语
    *
    @param putonghua
    *
    @return
    */
    private static String getYueyu(String putonghua)
    {
    String result
    = putonghua;
    for (int i = 0; i < putongs.size(); i++) {
    if(putongs.get(i).equals(putonghua))
    {
    result
    = yues.get(i);
    }
    }
    return result;
    }


    /**
    * 普通话翻译为粤语
    *
    * 先判断两个字,尽量翻译之。如果翻译没有变化,再判断一个字。
    *
    *
    @param str
    */
    private static String translate(String str) {
    StringBuffer result
    = new StringBuffer();
    String temp , yueyu;
    int j;
    int length = str.length();
    for (int i = 0; i < length; i++) {
    temp
    = str.substring(i, Math.min(i + 2, length));
    yueyu
    = getYueyu(temp);
    j
    = 1;
    if(yueyu.equals(temp))
    {
    temp
    = str.substring(i, i + 1);
    yueyu
    = getYueyu(temp);
    j
    = 0;
    }
    i
    += j;
    result.append(yueyu);
    }
    return result.toString();
    }

    /**
    * 粤语翻译为普通话
    *
    * 先判断两个字,尽量翻译之。如果翻译没有变化,再判断一个字。
    *
    *
    @param str
    */
    private static String translate2(String str) {
    StringBuffer result
    = new StringBuffer();
    String temp , putong;
    int j;
    int length = str.length();
    for (int i = 0; i < length; i++) {
    temp
    = str.substring(i, Math.min(i + 2, length));
    putong
    = getPutonghua(temp);
    j
    = 1;
    if(putong.equals(temp))
    {
    temp
    = str.substring(i, i + 1);
    putong
    = getPutonghua(temp);
    j
    = 0;
    }
    i
    += j;
    result.append(putong);
    }
    return result.toString();
    }




    class transToPutong implements ActionListener{
    JTextArea area1, area2;
    public transToPutong(JTextArea area1, JTextArea area2) {
    this.area1 = area1;
    this.area2 = area2;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
    String text
    = area1.getText();
    area2.setText(translate2(text));

    isTranslateYueyu
    = false;
    }
    }

    class transToYueyu implements ActionListener{
    JTextArea area1, area2;
    public transToYueyu(JTextArea area1, JTextArea area2) {
    this.area1 = area1;
    this.area2 = area2;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
    String text
    = area1.getText();
    area2.setText(translate(text));

    isTranslateYueyu
    = true;
    }
    }

    boolean isTranslateYueyu ;

    class areaAction1 extends MouseAdapter{
    JTextArea area1, area2;
    public areaAction1(JTextArea area1, JTextArea area2) {
    this.area1 = area1;
    this.area2 = area2;
    }
    @Override
    public void mouseReleased(MouseEvent e) {
    super.mouseReleased(e);
    String text
    = area1.getSelectedText();
    String text2
    = area2.getText();
    if(text == null || text.trim().equals("") || text2 == null || text2.trim().equals(""))
    {
    return;
    }
    String transText
    = "";
    if(isTranslateYueyu)
    {
    transText
    = getYueyu(text);
    }
    else{
    transText
    = getPutonghua(text);
    }

    int index = text2.indexOf(transText);
    if(index != -1)
    {
    area2.requestFocus();
    area2.setSelectionColor(Color.black);
    area2.setSelectedTextColor(Color.GREEN);
    area2.setSelectionStart(index);
    area2.setSelectionEnd(index
    + transText.length());
    area2.repaint();
    }
    }
    }


    /**
    *
    @param args
    */
    public static void main(String[] args) {

    Yueyu y
    = new Yueyu();

    JFrame frame
    = new JFrame("粤语翻译");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel panel
    = new JPanel();
    panel.setLayout(
    new BorderLayout());

    JPanel textPanel
    = new JPanel();
    textPanel.setLayout(
    new GridLayout(2, 1));

    JTextArea area1
    = new JTextArea(6, 36);
    area1.setFont(
    new Font("Serif",Font.PLAIN,20));
    area1.setBorder(
    new TitledBorder("输入要翻译的文字:"));
    textPanel.add(area1);

    JTextArea area2
    = new JTextArea(6, 36);
    area2.setFont(
    new Font("Serif",Font.PLAIN,20));
    area2.setBorder(
    new TitledBorder("翻译后的文字:"));
    textPanel.add(area2);

    panel.add(textPanel, BorderLayout.CENTER);

    area1.addMouseListener(y.
    new areaAction1(area1, area2));


    JPanel ctrlPanel
    = new JPanel();
    ctrlPanel.setLayout(
    new GridLayout(2, 1, 0, 6));
    JButton btn1
    = new JButton("转为粤语");
    ctrlPanel.add(btn1);

    JButton btn2
    = new JButton("转为普通话");
    ctrlPanel.add(btn2);
    panel.add(ctrlPanel, BorderLayout.EAST);


    btn1.addActionListener(y.
    new transToYueyu(area1, area2));
    btn2.addActionListener(y.
    new transToPutong(area1, area2));

    frame.getContentPane().add(panel);
    frame.pack();
    frame.setLocationRelativeTo(
    null);
    frame.setVisible(
    true);

    }

    }

    转载地址:http://www.cnblogs.com/chaohi/archive/2011/05/31/2064099.html

    编辑器加载中...

  • 相关阅读:
    StringUtils工具类的使用
    struts2 文件上传和下载,以及部分源代码解析
    ios开发之猜数字游戏
    从epoll构建muduo-12 多线程入场
    POJ3009 Curling 2.0(DFS)
    IOS-4-面试题1:黑马程序猿IOS面试题大全
    Android-Universal-Image-Loader载入图片
    《UNIX环境高级编程》读书笔记 —— 文件 I/O
    畅通project再续 HDU杭电1875 【Kruscal算法 || Prim】
    轻松学习之Linux教程四 神器vi程序编辑器攻略
  • 原文地址:https://www.cnblogs.com/Silence/p/2172515.html
Copyright © 2011-2022 走看看