如何制作一个简易的大会报告双语检索工具
自从大会报告双语版本发布以来,各大平台都在热转,尤其是翻译圈的各种微信公众号。然而,一个有价值的双语版报告不是那种以段段对照的形式发布成文章的,而是一个可以在网上实时检索的,比如这样:
在这篇帖子中,我将展示如何制作这个简易的双语报告检索工具,感兴趣的也可以自己尝试一下。
第一步:获取双语报告的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>
第二步:写几行代码,让翻译记忆在浏览器中呈现:
先修内容:
为了能看懂后面的步骤,有心的读者还需要去完成以下几步:
下载并安装一个叫XAMPP的软件:https://www.apachefriends.org/zh_cn/index.html
打开XAMPP并启动“Apache”和“MySQL”,如下图所示:
只有完成了上面这两步才可以运行我后面要用的几行代码。在XAMPP的根目录制定文件夹(C:\xampp\htdocs)下创建一个新文件夹,并看心情来命名,如:19。并把上一步找到的“.tmx”文件移到这个文件夹下(也可以根据个人心情来改名,比如我把这个文件名改成了“19.tmx”),并在这个文件夹下再创建一个叫“index.php”的空白文本文件,如下图:
完成以上几步后,用记事本打开“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”格式的双语翻译记忆展示在浏览器中,但并未实现其检索功能,这显然对于译者而言是非常不方便的。所以接下来我们就要实现一个简单的“在线检索”功能。
我们在这里选择一种相对来说逻辑简单易懂的方法:
首先将“.tmx”格式的双语内容导入到一个像“Excel表格”那样的数据库中;
在网页中展示一个像“百度”“谷歌”那样的搜索引擎界面;
输入要检索的关键词后立刻呈现包含关键词的所有双语句子。
我们先来实现第一小步
在这一小步中,我们将会运行一个叫作“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月上线与这个帖子相关的视频教程。
欢迎大家打赏鼓励。