查看原文
其他

如何制作一个简易的大会报告双语检索工具

韩林涛 简言 2022-07-09

自从大会报告双语版本发布以来,各大平台都在热转,尤其是翻译圈的各种微信公众号。然而,一个有价值的双语版报告不是那种以段段对照的形式发布成文章的,而是一个可以在网上实时检索的,比如这样:



在这篇帖子中,我将展示如何制作这个简易的双语报告检索工具,感兴趣的也可以自己尝试一下。


第一步:获取双语报告的TMX格式文件


在我所研究的“计算机辅助翻译”领域,双语的句子大多是以“.tmx”格式的文件存储的,这种叫作“翻译记忆”(Translation Memory),作用就是先把翻译过的双语内容存在翻译记忆中,当译者翻译一个句子时,先看一下翻译记忆中有没有这个句子或者有没有与这个相似的句子,如果有就把句子原文和译文显示出来提示给译者,译者就可以省去很多时间和精力去瞎编。


就像Word文档都是以“.doc”或“.docx”、Excel文档都是以“.xls”或“.xlsx”的文件格式存储一样,翻译记忆也有自己的存储格式,国际通用的格式就是刚才提到的“.tmx”。“tmx”是“Translation Memory eXchange”的缩写,国际上有组织制定了这种文件存储的标准。(参考:https://www.gala-global.org/tmx-14b)


总之,像大会报告这么权威的东西,得按国际标准做成翻译记忆才便于译者去使用。


获取这个报告的方法很多,可以自己做,也可以自己去买。我在前几天的计算机辅助翻译课上带着30几位高翻的同学做了一个,制作的工具就是下面这个平台:https://www.tmxmall.com/aligner



他们也提供制作好了的报告,比如这个:



我支持了一下他们,购买了一个制作完成的“.tmx”格式的大会报告双语翻译记忆,如下图:



可以用记事本打开这个文件,如下:



我截取了其中的一部分放在这里:


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<tmx version="1.4">

    <header creationtool="Tmxmall" segtype="sentence" adminlang="zh-CN" srclang="zh-CN" datatype="xml" creationdate="20171022T155351Z" creationid="TM STUDIO"/>

    <body>

        <tu creationdate="20171022T155351Z" creationid="TM STUDIO">

            <tuv xml:lang="zh-CN">

                <seg>大会的主题是:********</seg>

            </tuv>

            <tuv xml:lang="en-US">

                <seg>The theme of the Congress is: *********</seg>

            </tuv>

        </tu>

        <tu creationdate="20171022T155351Z" creationid="TM STUDIO">

            <tuv xml:lang="zh-CN">

                <seg>全党同志一定要永远与人民同呼吸********</seg>

            </tuv>

            <tuv xml:lang="en-US">

                <seg>In our Party, each and every one of us must always breathe the same breath as the people*********</seg>

            </tuv>

        </tu>

 </body>

</tmx>


这就是“.tmx”格式的“翻译记忆”的真面目。仔细一看的话,会发现它的格式是固定的,可以进一步简化成这样:


<tmx>

--------<header />

--------<body>

------------------<tu>

-----------------------<tuv xml:lang="zh-CN">

------------------------------------------------------- <seg></seg>

-----------------------</tuv>

-----------------------<tuv xml:lang="en-US">

------------------------------------------------------- <seg></seg>

-----------------------</tuv>

------------------</tu>

------------------<tu>

-----------------------<tuv xml:lang="zh-CN">

------------------------------------------------------- <seg></seg>

-----------------------</tuv>

-----------------------<tuv xml:lang="en-US">

------------------------------------------------------- <seg></seg>

-----------------------</tuv>

------------------</tu>

--------</body>

</tmx>



第二步:写几行代码,让翻译记忆在浏览器中呈现:


先修内容:


为了能看懂后面的步骤,有心的读者还需要去完成以下几步:


  1. 下载并安装一个叫XAMPP的软件:https://www.apachefriends.org/zh_cn/index.html

  2. 打开XAMPP并启动“Apache”和“MySQL”,如下图所示:


    只有完成了上面这两步才可以运行我后面要用的几行代码。

  3. 在XAMPP的根目录制定文件夹(C:\xampp\htdocs)下创建一个新文件夹,并看心情来命名,如:19。并把上一步找到的“.tmx”文件移到这个文件夹下(也可以根据个人心情来改名,比如我把这个文件名改成了“19.tmx”),并在这个文件夹下再创建一个叫“index.php”的空白文本文件,如下图:





  4. 完成以上几步后,用记事本打开“index.php”。


正文内容:


完成了上面的先修内容后,我们就可以把下面这几行代码贴到“index.php”文件中了。


代码:


<?php


header("content-type:text/html; charset=utf-8"); 


$xml = simplexml_load_file('19.tmx');

$json = json_encode($xml);

$jsondata = json_decode($json,true);


foreach ($jsondata["body"]["tu"] as $tu)

{

echo $tu["tuv"][0]["seg"]."<br>";

echo $tu["tuv"][1]["seg"]."<br>";

echo "<br>";

}


?>


效果如图:



然后打开浏览器,输入:localhost/19/index.php


效果如下:


这样一来,双语报告的文本就显示在浏览器里了,接下来我们就可以使用快捷键“Ctrl+F”来检索报告的内容了。


本文完,请速速打赏。




等等......WTF?这就完了?我随随便便都能打开一个网页,用“Ctrl+F”来查询内容,你这唬谁呢?




额.....说的有道理......那我继续写点内容吧.....


第三步:给浏览器中的双语数据添加检索功能


在第二步中,我们仅仅实现了把“.tmx”格式的双语翻译记忆展示在浏览器中,但并未实现其检索功能,这显然对于译者而言是非常不方便的。所以接下来我们就要实现一个简单的“在线检索”功能。


我们在这里选择一种相对来说逻辑简单易懂的方法:


  1. 首先将“.tmx”格式的双语内容导入到一个像“Excel表格”那样的数据库中;

  2. 在网页中展示一个像“百度”“谷歌”那样的搜索引擎界面;

  3. 输入要检索的关键词后立刻呈现包含关键词的所有双语句子。


我们先来实现第一小步


在这一小步中,我们将会运行一个叫作“insert.php”的文件,其代码如下:


<?php

header("content-type:text/html; charset=utf-8"); 


// 以下为连接数据库

$con = mysql_connect("localhost","root","");

if (!$con){die('Could not connect: ' . mysql_error());}


// 以下为创建数据库

if (mysql_query("CREATE DATABASE IF NOT EXISTS 19_da DEFAULT CHARSET utf8 COLLATE utf8_general_ci;",$con))

   {echo "Database is successfully created!";}

else

   {echo "Something happened when creating database: " . mysql_error();}

// 以下为在创建的数据库中添加数据表

mysql_select_db("19_da", $con);

$tmx_sql = "

CREATE TABLE IF NOT EXISTS `tmx`

(

   `id` INT UNSIGNED AUTO_INCREMENT,

   `zh_CN` VARCHAR(500) NOT NULL,

   `en_US` VARCHAR(500) NOT NULL,

    PRIMARY KEY ( `id` )

)

ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;

";

mysql_query($tmx_sql,$con);


// 以下为加载tmx文件

$xml = simplexml_load_file('19.tmx');

$json = json_encode($xml);

$jsondata = json_decode($json,true);


// 以下为将tmx文件中的中文和英文分别插入到数据表中

mysql_select_db("19_da"); 

mysql_query("set names 'utf8'");

foreach ($jsondata["body"]["tu"] as $tu)

{

$zh_CN = $tu["tuv"][0]["seg"];

$en_US = $tu["tuv"][1]["seg"];

$insert_sql = "insert into `tmx`(`zh_CN`,`en_US`) values('$zh_CN', '$en_US')";

$result = mysql_query($insert_sql,$con);

}


// 以下为关闭数据库

mysql_close($con);

?>


在文件中的效果如下:



也就是说,每当拿到一个“.tmx”格式的文件后,我们就可以把这个文件和“insert.php”文件都放到“19”这个文件夹下,然后在浏览器中输入:localhost/19/insert.php


当浏览器界面中出现这个提示后,就表明数据已经成功添加到数据库中了:


这时候我们点击XAMPP界面的这个按钮:



就可以在后台查看已经成功建立的双语数据表了:



这个数据表一般人是看不到的,只能在网站的后台看到。


接下来我们来实现第二小步


我们要做一个像谷歌、百度那样的检索框,所以我们可以在“19”这个文件夹下面新建一个叫“index.html”的文本文件,然后在其中输入以下代码:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">


<head>

    <title>检索</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <link rel="stylesheet" href="" type="" />

</head>


<body>

    <div>

        <h1><a href="index.html" style="text-decoration:none; color:white;">报告检索</a></h1>

    </div>

    

<form action = "result.php" method ="post" class="form-wrapper cf" style="margin-top:20px;">

<input type="text" placeholder="请输入要检索的关键词" name="searchterm">

<button type="submit">搜索</button>

</form>

</body>

</html>


效果如图:



现在我们在浏览器中输入:http://localhost/19/index.html,看到的内容如下:


这是一个“还没穿衣服”的网页,姑且先这样吧。一会儿再给她穿衣服。


最后我们来走第三小步。


我们在“19”文件夹下面创建一个“result.php”页面,在其中输入以下代码:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">


<head>

  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  <link rel="stylesheet" href="" type="" />

</head>


<body>

    <div>

        <h1><a href="index.html" style="text-decoration:none; color:white;">双语报告</a></h1>

    </div>

    <form action = "result.php" method ="post" class="form-wrapper cf" style="margin-top:20px;" >

   <input type="text" placeholder="请输入要检索的词" name="searchterm">

   <button type="submit">搜索</button>

    </form>


    <?php 

        $con = mysql_connect('localhost', 'root', '') 

            or die('Could not connect: ' . mysql_error());  

        mysql_select_db('19_da') or die('Could not select database'); 

        mysql_query("set names utf8");

        $searchterm =$_POST['searchterm'];

        $query = "SELECT * FROM tmx WHERE zh_CN LIKE '%$searchterm%' or en_US LIKE '%$searchterm%' ";  

        $result = mysql_query($query);

        $rows = mysql_num_rows($result);

        print '<table class="table table-bordered">';

        print '<tr><td><h3>共计'.$rows.'条数据</h3></td></tr>';

        print '</table>';

        echo "<table border='1'>

                <tr>

                <th>中文</th>

                <th>英文</th>

                </tr>";

        while ($line = mysql_fetch_array($result)) {  

            echo "<tr>";

            echo "<td>".$line['zh_CN']."</td>";

            echo "<td>".$line['en_US']."</td>";

            echo "</tr>";

            }  

        echo "</table>\n"; 

        mysql_free_result($result); 

        mysql_close($con);  

    ?>

</body>


效果如下图:



三小步走完,我们来看一下效果:


在浏览器里打开:http://localhost/19/index.html


在检索框中输入:新时代


结果如下:



现在无论是输入中文还是英文,都能看到双语的文本展示出来。


小彩蛋


为了能让大家也能体验这个简易的小工具,我给它穿了件旧衣服,放到了我的服务器上,大家可以访问以下网址浏览,也可以点击“阅读原文”浏览。


网址:http://translation.education/19/index.html



检索结果如图:



结语


这次我没有详细分析代码,我准备在我的《搜智》课中详细介绍。等大会开完之后,大家可以去“高翻学堂”上选修《搜智》,预计12月上线与这个帖子相关的视频教程。


欢迎大家打赏鼓励。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存