CN1620658A - 多语言数据库创建系统与方法 - Google Patents

多语言数据库创建系统与方法 Download PDF

Info

Publication number
CN1620658A
CN1620658A CNA028281322A CN02828132A CN1620658A CN 1620658 A CN1620658 A CN 1620658A CN A028281322 A CNA028281322 A CN A028281322A CN 02828132 A CN02828132 A CN 02828132A CN 1620658 A CN1620658 A CN 1620658A
Authority
CN
China
Prior art keywords
language
word
document
translation
section
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CNA028281322A
Other languages
English (en)
Inventor
埃里·阿博
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US10/024,473 external-priority patent/US20030083860A1/en
Application filed by Individual filed Critical Individual
Publication of CN1620658A publication Critical patent/CN1620658A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/279Recognition of textual entities
    • G06F40/289Phrasal analysis, e.g. finite state techniques or chunking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/40Processing or translation of natural language
    • G06F40/42Data-driven translation
    • G06F40/44Statistical methods, e.g. probability models
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/40Processing or translation of natural language
    • G06F40/42Data-driven translation
    • G06F40/45Example-based machine translation; Alignment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/40Processing or translation of natural language
    • G06F40/55Rule-based translation

Abstract

一种用于将第一种语言的文档段落(1)翻译成第二种语言的文档段落(2)的方法与设备。文档段落可以是在文档中直接翻译的单词(3)形式的文本。本发明可用于没有足够信息将第一种语言的文档翻译成第二种语言的文档的情况(3)。本发明包括提供第一种语言的文档段落(1)与多种第三种语言之一的文档段落之间的关联、提供第二种语言的样本段落(2)(每个样本段落对应于多种第三种语言之一的段落)之间的关联、将至少两个同样的样本段落标识成一个推论的关联段落,以及将该推论的关联段落与第一种语言的文档段落(1)相关联。

Description

多语言数据库创建系统与方法
相关申请
本申请是美国申请编号10/024473(2001年12月21日入档)的延续部分,要求美国临时专利申请编号60/276107(2001年3月16日入档)和美国临时专利申请编号60/299472(2001年6月21日入档)的权益,这两项申请都在此附录以供参考。
技术领域
本发明是关于一种用于创建可用于将内容从一种状态转换到第二种状态的多语言数据库的方法与设备。
发明背景
用于自动将文档从一种语言翻译到另一种的设备与方法是已知的。然而,这些设备与方法经常不能准确地将文档从一种语言翻译到另一种,会消耗大量的时间,并且不便于使用。除了人工翻译外,其它已知的设备包括可商用的机器翻译软件。这些已知的系统具有致使其易于出错、速度缓慢且使用不便的缺陷。已知的翻译设备与方法不能始终对输入的文本返回准确的译文,因此经常要求加强的用户干预来校对阅读和编辑。准确的机器翻译比提供进行文档的词对词翻译的设备与方法更为复杂。在这些词对词系统中,由于词对词方法导致错误的单词选择和不连贯的语法单元,该翻译对于翻译后文档经常是对读者毫无意义。
为了克服这些不足,已知的翻译设备已经在几十年来试图根据词汇、形态、句法及语义的规则组合或集合,在句子的上下文内作出单词翻译的选择。这些在相关技术中称为“基于规则”的机器翻译(MT)系统也有缺陷,因为对于规则有太多的例外,使它们不能提供始终准确的译文。
除了基于规则的MT以外,在上一个十年里发展了一种新的称为“基于范例”(EBMT)的MT方法。EBMT利用存储在一个跨语言数据库中的两种不同语言的句子(或可能是句子部分)。当某个翻译查询与数据库中的一个句子匹配时,由数据库产生该句子目标语言的译文,提供一个第二种语言的准确译文。如果某个翻译查询的一部分与数据库中的一个句子的一部分匹配,则这些设备试图准确地判定映射到源语言句子的哪个句子部分是该查询的译文。
EBMT系统不能提供广泛语言的准确翻译,因为跨越语言的句子的数据库是手工建立的,将总主要是“不完善”的。EBMT系统的另一个缺陷是部分的匹配不能被可靠地翻译。已经尝试用翻译了的文档对来自动化跨语言数据库的创建,以便在EBMT中使用。但是,这些努力在创建任何相当大尺寸的有意义的准确的跨语言数据库上尚未成功。这些尝试都没有使用某种算法来可靠并准确地从翻译了的文档对中提取相当大数量单词与词串的译文。
某些翻译设备组合了基于规则的和EBMT引擎。尽管这一方法组合可能比任一单独系统产生更高的准确率,但其结果若没有相当大的用户干预和编辑,仍是不适于使用的。
在试图将文档从一种语言翻译到另一种时所面对的问题可以更一般化地应用于将表示观念或信息的数据从一种状态(比如单词)转换成以另一种状态(例如数学符号)表示该观念的数据的问题。在这一情况下,必须查询将一种状态下的数据与第二种状态下的等价数据相关联的跨观念关联数据库。因此,就存在对某种改进了的并且更高效的方法与设备的需求,用来创建将不同语言或状态下的等价观念(如单词、词串、声音、动作等等)相关联的字典或数据库,并且将一种语言或状态下的文档所传达的观念翻译或转换成第二种语言或状态所表示的同样或类似观念。
本发明是关于用跨观念关联数据库来处理内容。特别的是,本发明提供了一种用于创建关联的观念的数据库的方法与设备,并提供了一种用于利用该数据库来将数据从一种状态转换成其它状态的方法与设备。
在某一实施例中(举例来说),本发明提供了一种用于创建一个语言翻译数据库的方法与设备,其中两种语言构成了该关联了观念的数据库。本发明还提供了一种用于利用该语言数据库将(表示着观念的)文档从一种语言转换到另一种(或者更一般性地说,从一种状态转换到另一种)的方法与设备。然而,本发明并不局限于语言翻译,尽管将要介绍该较佳实施例。本发明的数据库创建方面可以应用于任何以某种方式相关但以不同状态表达的观念,而本发明的转换方面可以应用于准确地将观念从一种状态翻译成另一种。
现在将描述本发明对某种语言翻译实施例的应用。如在此已经使用的那样,关于转换、翻译和处理的术语可互换并且是在它们最宽泛的意义上使用。
发明内容
本发明的一个目的是通过提供一种用于创建和补充跨观念关联数据库的方法与设备来实现将文档从一种语言或状态翻译到另一种语言或状态。这些数据库一般将以第一种形式或状态表示特定观念或信息片断的数据与以第二种形式或状态表示同样观念或信息片断的数据相关联。
本发明的另一个目的是通过提供一种用于从第一种状态、形式或语言的数据构成的第一个文档来创建第二种状态、形式或语言的数据构成的第二个文档,而其结果是该第一个和第二个文档实质表示同样的观念或信息的方法与设备来实现将文档从一种语言或状态翻译到另一种语言或状态。
本发明的另一个目的是通过提供一种用于从第一种状态、形式或语言的数据构成的第一个文档来创建第二种状态、形式或语言的数据构成的第二个文档,而其结果是该第一个和第二个文档实质上表示同样的观念或信息的方法与设备来实现将文档从一种语言或状态翻译到另一种语言或状态,而该方法与设备包括使用一个跨观念关联数据库。
本发明的另一个目的是以实时方式提供文档译文(在某种宽泛的意义上,将观念从一种状态转换到另一种状态)。
本发明通过提供一种用于创建跨观念数据库的方法与设备来达到这些以及其它目的。这种用于创建跨观念数据库的方法与设备可以包括提供以两种(或多种)语言表示同样一般性文本(即文本的确切译文(“平行文本”)或一般相关文本(“可比较文本”))的一对或两对文档。本发明在可用的跨语言文档中从以第一种语言多次出现的所有单词和词串中选择至少第一和第二次出现。而后在第二种语言文档中选择至少第一个单词范围和第二个单词范围,其中该第一和第二个单词范围与选定单词或词串在第一种语言文档中的第一和第二次出现相对应。接着,将在第一个单词范围中找到的单词和词串与在第二个单词范围中找到的单词和词串相比较,以及定位在两个单词范围中共同的单词和词串,并将那些已定位的共同单词和词串存储到跨观念数据库中。而后本发明在所述跨观念数据库中将第二种语言的在两个范围内的已定位的共同单词和词串与第一种语言的选定单词和词串相关联,在按此处所细述的那样调整关联频度后,按它们的关联频度(重新出现的次数)排列。通过以“平行”或“可比较”文本跨语言测试共同单词和词串,该数据库在更多“平行”或“可比较”文本以各种不同语言变得可用时,能解决更多的关联。
本发明还通过提供一种用于将文档从一种状态转换到另一种状态的方法与设备来达到这些以及其它目的。本发明提供了一种数据库,由与第二种语言的数据段相关联的第一种语言的数据段构成(通过上述的方法或手工创建)。本发明通过访问上面所提及的数据库,并标识在该数据库中存在的,在要翻译的文档中以该文档的第一个单词开头的最长的词串(通过单词数衡量)来翻译文本。而后系统从该数据库中检索出一个与在第一种语言文档中已定位的词串相关联的第二种语言的单词。而后系统在文档中选择存在于该数据库中并具有与文档中前所标识的词串重叠的单词(或可以是词串)的第二个词串,并从该数据库中检索一个与第一种语言的第二个词串相关联的第二种语言的词串。如果第二种语言的词串关联具有重叠的单词(或可以是词串),则将第二种语言的词串关联组合(去除重叠中的冗余),以形成译文;如果没有重叠,则找出并测试与第一种语言词串的其它第二种语言的关联,以便通过单词的重叠来组合,直至成功。通过寻找在该数据库中具有与前所标识的第一种语言词串重叠的单词(或可以是词串)的最长词串来选择文档中第一种语言的下一个词串,并继续上面的过程,直至整个第一种语言文档被翻译成第二种语言文档。
附图说明
图1示出了如本发明所述的一种跨观念数据库的一个实施例。
发明详细描述
本发明提供了一种用于创建和补充跨观念数据库和用跨观念数据库将文档从第一种语言或状态翻译到第二种语言或状态的方法与设备。在此所讨论的文档是信息的集合,如由固定在某种媒质中的符号和字符所表示的观念。举例来说,文档可以是存储在磁或光媒质上的电子文档,或者是纸文档,如书籍。在文档中所包含的符号和字符表示着用希望由该文档用户所理解的一个或多个表达系统所表达的观念和信息。本发明处理第一种状态下的文档(即包含以某种表达系统所表达的信息),以产生第二种状态下的文档(即包含用第二种种表达系统所表达的实质相同的信息)。如此,本发明可在表达系统之间处理或翻译文档,例如将书面或口头语言如英语、希伯来语和广东话处理或翻译成其它语言。
现在将描述本发明的一个详细描述,包括数据库创建方法与设备以及转换方法与设备。
1.数据库创建方法与设备
a.概述
本发明的方法利用跨观念数据库进行文档内容处理。图1描述了跨观念数据库的一个实施例。这一跨观念数据库的实施例由列1和2中的相关联数据段的列表构成。这些数据段是以某种表达系统表示特定观念或信息片段的符号或字符组。如此,列1中的系统A段是以假定表达系统A表示各种观念及观念组合Da1、Da2、Da3和Da4的数据段。列2中的系统B段是以假定表达系统B表示各种观念及这些观念的某些组合的数据段Db1、Db3、Db4、Db5、Db7、Db9、Db10和Db12,它们按与表达系统A中数据段的关联频度排序。列3示出直接频度,这是语言B的一个段或多个段与所列出的语言A的段(或多个段)相关联的次数。列4示出减后频度,这表示在减去段(或多个段)被关联成某个较大段的一部分(如稍后所充分描述的那样)的次数后语言B的一个数据段(或多个段)与语言A的一个段(或多个段)相关联的次数。
如图1中所示,有可能某单个段(比如Da1)是最适合于与多个段Db1及Db3和Db4相关联的。数据段间的减后频度(如在此所描述的)越高,系统A段与系统B段等价的概率就越高。除了通过用出现总数衡量调整后的频度以外,还可以通过(例如)计算特定系统A段与特定系统B段相对应次数的百分比来衡量调整后的频度。在用数据库来翻译文档时,在过程中将首先从数据库中找出最高等级的关联段。但是,用以测试针对译文的关联段的组合(如稍后所描述的那样)的方法经常会判定应当测试某个不同的较低等级的关联,因为较高等级的关联一旦测试就不能使用了。举例来说,如果向数据库查询一个对Da1的关联,则将返回Db1+Db3+Db4;如果为译文准确组合数据段的过程判定Db1+Db3+Db4不能使用,则数据库将返回Db9+Db10以测试与另一个针对译文的关联段的准确组合。
一般而言,本发明的用于创建跨观念数据库的方法包括检查与操作“平行”或“可比较”文本。利用本发明的方法与设备,使数据库以跨越两个状态——准确转换的关联(或更明确地说,是以一种状态表达的观念与以另一种状态表达的观念之间的关联)而创建。随着由本发明检查与操作更多的文档,两个状态之间的翻译和其它相关关联变得更强,即更为频繁,这样通过操作文档的一个足够大的“样本”,最普遍的(在某种意义上也是正确的)关联就变得明显,而该方法与设备就可以用于转换目的。
在本发明的某一实施例中,两种状态表示单词语言(如英语、希伯来语、汉语等),这样本发明就创建一个将一种语言的单词和词串与它们的第二种语言译文配对相关联的跨语言数据库。词串可以定义为连续相邻单词的组,并经常包括标点和在语言表达中使用的任何其它标记。在本例中,本发明通过检查两种语言的文档并对每个在两种语言中重现的单词或词串创建译文数据库来创建数据库。但是,本发明不必需局限于语言翻译。本发明使用户能创建观念的数据库并以分级方式将这些观念与其它不同的观念相关联。如此,观念就与其它观念相关联,并按照出现的频度分级。赋予出现频度的特定权重以及对如此创建的数据库的运用可以根据用户的需求而变化。
举例来说,在将文本从一种语言转换成另一种的上下文中,本发明将运作来创建英语和汉语之间单词和词串的语言翻译。本发明将返回跨这两种语言的单词和词串之间关联的等级。假定有一个足够大的样本尺寸,则最常出现的单词或词串就将是英语单词或词串的汉语等价物之一。然而,本发明也会返回对该英语单词或词串的其它汉语关联,而用户可以如所希望的那样处理这些关联。举例来说,在按照本发明时,单词“mountain”可以以所检查的语言返回一个汉语单词和词串的列表。单词“mountain”的汉语等价物最可能就是分级最高的;但本发明会返回其它与“mountain”相关联的外语单词或词串,例如“雪”、“天空”、“一种危险运动”、“世界的最高点”或“珠穆朗玛峰”。这些可能比“mountain”的译文分级低的单词和词串可以由用户按希望的那样处理。如此,本发明就是一个自动化的关联数据库创建器。在某种意义上最强的关联表示着“翻译”或“转换”,而其它频繁的(但较弱的)关联表示与所检查的观念密切相关的观念。所以,该数据库可以由使用在相关技术中众所周知的人工智能应用的系统来使用。这些系统现在使用不完善的手工创建的观念数据库或实体作为用于应用的“神经网络”。
本发明的另一实施例使用某种计算设备,例如在已有技术中很容易可供使用类型的个人计算机系统。尽管该计算设备一般是普通的个人计算机(独立的或在联网环境中的),也可类似地考虑其它计算设备,例如PDA、无线设备、服务器、大型主机等等。但是,本发明的方法与设备不必需使用这样的计算设备,可以由其它手段来容易地实现,包括跨关联的手工创建。检查连续文档以增大文档“样本”并创建跨关联数据库的方法是各式各样的——可以通过自动输入(例如在已有技术中已知的自动装纸器)或通过在互联网上使用检索技术以自动找出相关文档(例如网络搜索器)来设置文档,用于手工分析和处理。
请注意,除了(或甚至替代)“平行文本”以外,本发明可以通过检查“可比较文本”来产生相关联数据库。而且,在检索某语言内某个重现的单词或词串时,本方法着眼于所有可用文档的全体。
b.建立数据库
如本发明所述,检查文档是为建立数据库的目的。在文档输入(再次,是以两种不同语言表示同样文本的文档对)后,用在此所描述的方法与/或设备开始创建过程。
为说明目的,假设文档包含两种语言的相同内容(或一般意义上说,是观念)。文档A为语言A,文档B为语言B。这些文档具有以下文本:
    文档A(语言A)     文档B(语言B)
    X Y Z X W V Y Z X Z     AA BB CC AA EE FF GG CC
本发明中的第一步是计算一个单词范围,以确定对任何给定单词或词串的可能关联的大致位置。由于跨语言词对词分析单独不能产生建设性的结果(即,照文档B中单词1的字面翻译,文档中单词1往往不存在),而一种语言的句子结构可能在另一种语言中在不同的位置(或顺序)具有等价的观念,因此本发明的数据库创建技术将第一种语言的每个单词或词串与第二种语言文档中某个选定范围中的所有单词和词串相关联。这也是重要的,因为一种语言往往以比另一种语言更长或更短的词串来表达观念。该范围通过检查这两个文档来确定,并用以将第二个文档中的单词和词串与第一个文档中的单词和词串比较。也就是说,将第二个文档中某个范围的单词或词串作为对第一个文档中每个单词和词串的可能关联来检查。通过测试一个范围,该数据库创建技术确定可能等同或翻译到第一种语言单词和词串的许多第二种语言单词或词串。
为了在第二种语言文档中设定在其中查找对第一种语言文档中任何给定单词或词串的关联的范围,必须确定两个属性。第一个属性是第二个文档中该范围的值或尺寸,以该范围中单词的数量来衡量。第二个属性是第二个文档中该范围的位置,以该范围的中点的定位来衡量。这两个属性都是用户定义的,但下面提供较佳实施例的示例。在定义该范围的尺寸和位置时,目标是确保包括所分析的第一种语言段的第二种语言单词或词串译文的高概率。
可以用多种技术来确定该范围的尺寸或值,包括普通的统计技术如根据文档中的单词数量的钟形曲线导出。在某种统计技术如钟形曲线下,在文档的开头和结尾的范围将比在文档中间的范围要小。该范围的钟形频度实现了外推出译文是根据文档中单词的绝对数量还是根据文档中单词的某种百分比而导出的合理机会。还存在计算该范围的其它方法,例如某种“步进”技术,其中该范围存在于针对单词的某个百分比的某一层、针对单词的另一个百分比的第二个更高层,以及针对单词的最后百分比的等于第一层的第三层。再次,所有的范围属性可以是以捕捉针对所分析第一种语言中的单词或词串的有用关联为目的,根据其它可能的参数而用户定义或设定的。
第二种语言文档内该范围的位置可能取决于两个文档中单词数量之间的对比。为范围位置目的而被认为是文档的是用户定义的,并由新闻文章、书籍章节以及任何其它可离散地识别的内容单元例示为是由多个数据段组成。如果两个文档的单词计数大略相等,则第二种语言的该范围的位置大略与所分析的第一种语言单词或词串的位置相符。如果两个文档中的单词数量不相等,则可以用比率来正确定位该范围的位置。举例来说,如果文档A有50个单词而文档B有100个单词,则这两个文档之间的比率为1∶2。文档A的中点是单词位置25。如果正分析文档A中的单词25,而使用这一中点(单词位置25)作为文档B中该范围的中点定位则不是有效的,因为这一点(单词位置25)不是文档B的中点。而是,针对分析文档A中单词25的文档B中范围的中点可以通过文档B中点的手工定位或通过其它技术,由这两个文档之间的单词比率来确定(即,25×2/1=50)。
通过观看文档中某个单词或词串的位置并注意所有如上所述落在该范围内的单词或词串,本发明的数据库创建技术返回可以翻译到所分析的第一个文档中每个单词或词串的可能的一组第二种语言文档中单词或词串。在利用本发明的数据库创建技术时,被认为是可能的译文的单词或词串组将随关联频度的发展而缩小。如此,在检查一对文档后,本发明将对一种语言的单词和词串创建与第二种语言的单词或词串的关联频度。在按照本发明检查了许多文档对(从而创建了一个大样本)后,跨语言关联数据库技术将对任一单词或词串返回越来越高的关联频度。在一个足够大的样本后,最高的关联频度导致可能的译文;当然,其关联频度被认为是准确译文的最终点是用户定义的,并服从其它的解释性翻译技术(例如那些在2001年3月16日入档的题为“用于内容处理的方法与设备”的临时申请编号60/276107(在此附录以供参考)中所描述的)。
如上面所指出的那样,本发明不仅测试单词,也测试词串(多个单词)。如所提及的那样,词串包括所有出现的标点和其它标记。在分析了第一种语言的某单个单词后,本发明的数据库创建技术分析一个两单词的词串,而后是三单词的词串,并以递增方式如此继续。这一技术使在另一种语言中可翻译成更短或更长的词串(或单词)的一种语言的单词或词串的译文成为可能。如果某个单词或词串在第一种语言的所有可用文档中只出现一次,则该过程立即进到分析下一个单词或词串,而在该处再次出现分析周期。该分析在分析了第一种语言的所有可用“平行”和“可比较”文本中的所有单词或词串多次出现后停止。
在某种意义上,为查找单词或词串的重现的目的,可以集合任意数量的文档并将它们看成一个单个的文档。基本上,对一个不重复的单词或词串,在所有可用的“平行”和“可比较”文本中将只出现一次。而且,按照另一实施例,有可能检查对应于每个单词和词串的范围,而无论其在所有可用的“平行”和“可比较”文本中是否出现多于一次。按照另一实施例,数据库可以通过解析作为某查询一部分的特定单词和词串来建立。在输入单词和词串以作翻译时,本发明可以通过用网络搜索器及其它设备在互联网上定位跨语言文本,以及最终通过根据查询的分析和缺乏足够可用的跨语言材料而要求用户提供缺失的关联,在存储在内存中的还没有被分析过的跨语言文档中查找单词或词串的多次出现。
因此,本发明以这样的方式运作,以致能分析取决于单词(在该词串中)的正确定位,并可以以这样的方式运作,以致能考虑单词选择的上下文以及语法特质,例如措辞、文体或缩写。这些词串关联对于如在此所描述的那样提供翻译过程的双重叠翻译技术也是有用的。
重要的是请注意,本发明可以适应一个较大词串的单词或词串子集始终被返回成对该较大词串的关联的情况。本发明通过处理频度返回来考虑这些模式。举例来说,固有名词有时候完整显现(如在“John Doe”中),有时候由名或姓来缩写(“John”或“Doe”),或以另一种方式来缩写(“Mr.Doe”)。由于本发明最可能返回比词串返回更多的单独的单词返回(即,更多对名或姓的返回,而不是对全名词串“John Doe”的返回),因为组成词串的单词必然被单独以及作为短语的一部分被计数,所以应当利用某种机制来改变分级。举例来说,在任何文档中名字“John Doe”可能出现一百次,而“John”本身或作为“John Doe”的一部分可能出现一百二十次,“Doe”本身或作为“JohnDoe”的一部分可能出现一百十次。在试图分析词串“John Doe”时,(按照本发明的)正常的译文返回会将“John”分级高于“Doe”,而这两个词都高于词串“John Doe”。通过从子集的出现次数(或单独返回)中减去较大词串的出现次数,可以实现适当的排序(尽管当然还可以利用其它的方法来获得类似的结果)。如此,从一百二十(单词“John”的出现次数)中减去一百(单词“John Doe”的出现次数),对“John”的校正了的返回是二十。运用这一分析产生一百作为词串“John Doe”的出现次数(在分析并试图翻译这一词串时),二十作为单词“John”的,十作为词串“Doe”的,从而创建适当的关联。
请注意这一问题不限于固有名词,也经常在普通短语和在许多不同上下文中发生。举例来说,每次将词串“I love you”翻译成其在另一种语言中的最频繁的词串关联时,在那另一种语言中对“love”的单词可以在这些次的每一次都被独立关联。而且,在该词串在所分析的其它文本中被不同地翻译时,单词“love”可以再次被关联。这将歪曲该分析,并返回第二种语言的单词“love”,而不是作为对第一种语言的“I love you”的译文的第二种语言的“I love you”。所以,再一次,本系统在对较大串的关联分级时从所有子集关联的频度中减去该较大词串关联的出现次数。这些观念也反映在图1中。
而且,可以指令数据库在对单词和词串的关联频度计数时忽略普通单词如“it”、“an”、“a”、“of”、“as”、“in”等等——或任何普通单词。这将更准确地反映真实的关联频度数,否则这将被普通单词作为任何给定范围一部分的无数次出现所歪曲。这使本发明的关联数据库创建技术能防止普通单词没有额外减除计算而歪曲分析。应当注意,如果这些或任何其它普通单词没有从关联数据库中减去,它们最终将被证明不能作为译文,除非是恰当的,因为在此更详细描述的双重叠过程将不接受它。
应当注意,可以进行其它计算来调整关联频度,以确保准确反映单词和词串的普通出现次数。举例来说,在所分析单词的范围重叠时,防止双重计数的调整是恰当的。在这些情况下要建立更准确的关联频度,调整是需要的。现在将用上面所描述的两个文档作为示例来描述如本发明所述的用于创建和补充跨观念数据库的方法与设备的一个实施例的示例——该表格重新创建如下:
    文档A(语言A)     文档B(语言B)
    X Y Z X W V Y Z X Z     AA BB CC AA EE FF GG CC
请再次注意,尽管这一实施例只在单个文档中注重于单词和词串的重现,但这主要是用于说明性目的。重现的单词和词串将用总计的所有可用“平行”和“可比较”文本来分析。
使用上面所列出的两个文档(第一种语言的A和第二种语言的B),本数据库创建技术进行以下步骤。
步骤1.首先,确定范围的尺寸和位置。如所指出的那样,尺寸和位置可以是用户定义的,或可以由多种方法来近似。该两个文档的单词计数大致相等(文档A中十个单词,文档B中八个单词),所以我们将定位该范围的中点以与文档A中单词或词串的位置相符。(注意:在该文档间单词计数的比率是80%时,可供选择地该范围的位置可以运用一个分数4/5来建立)。在本例中,范围尺寸或值三可以提供近似钟形曲线的最佳结果;该范围将是在文档的开头与结尾(+/-)1,而在中间(+/-)2。但是,如所指出的那样,该范围(或用以确定该范围的方法)完全是用户定义的。
步骤2.接着,对文档A检查与测试文档A中的第一个单词,以确定该单词在该文档中的出现次数。在本例中文档A中的第一个单词是X;X在文档A中出现三次,在位置1、4和9。单词或词串的位置号码只不过是该单词或词串在文档中相对于其它单词的位置。如此,位置号码对应于忽略标点的文档中单词的数量——举例来说,如果某个文档中有十个单词,而单词“king”出现两次,则单词“king”的位置号码仅仅是该单词(在十个单词中)出现的位置。
因为单词X在该文档中出现多于一次,所以过程前进至下一步骤。如果单词X只出现一次,则将跳过该单词,过程继续到下一个单词,并继续该创建过程。
步骤3.返回在位置1的第一种语言单词X的可能的第二种语言译文:对文档B应用该范围产生在文档B中位置1和2(1+/-1)的单词:AA和BB(位于文档B中的位置1和2)。返回所有可能的组合,作为对X的潜在译文或相关关联:AA、BB和AA BB(作为词串组合)。因此,X1(单词X的第一次出现)返回AA、BB和AA BB作为关联。
步骤4.分析单词X的下一个位置。该单词(X2)在位置4出现。由于位置4在该文档的中心附近,该范围(如上面所确定的那样)将是在位置4任一边的两个单词。通过考虑文档B中的单词4并应用范围(+/-)2来返回可能的关联——因此,返回单词4前的两个单词和单词4后的两个单词。因此,返回在位置2、3、4、5和6的单词。这些位置在文档B中对应于单词BB、CC、AA、EE和FF。考虑这些单词(及其组合词串)的所有前向排列,因此X2返回BB、CC、AA、EE、FF、BB CC、BB CC AA、BB CC AA EE、BB CC AA EE FF、CC AA、CC AA EE、CC AA EE FF、AA EE、AA EE FF和EE FF作为可能的关联。
步骤5.将X第一次出现的返回(位置1)与X第二次出现的返回(位置4)相比较,判断其匹配。请注意包括出现在两个范围的重叠中的同样单词或词串应当减少到单次出现。举例来说,在本例中在位置2的单词是BB;它对X的第一次出现(在以该范围操作时)和X的第二次出现(在以该范围操作时)都会返回。因为对X1和X2返回这一相同的单词位置,所以该单词计成一次出现。但是,如果在某个重叠的范围中返回同样的词,但来自两个不同的单词位置,则该单词计数两次,并记录下关联频度。在这一情况下,对单词X的返回是AA,因为该单词(AA)在对X1和X2的关联返回中都出现。请注意另一个在两个关联返回中都出现的单词是BB:但是,如上面所描述的那样,由于该单词是在以该范围在X的第一和第二次出现上操作时都能达到的同一位置(从而也是同一单词),所以该单词可以忽略。
步骤6.分析单词X的下一个位置(位置9)(X3)。应用范围(+/-)1(在文档结尾附近)返回在文档B的位置8、9和10的关联。由于文档B只有8个位置,所以这些结果被截去,且只返回单词位置8作为对X的可能的值:CC。(注意:可供选择地,可以调用要最少两个字符作为分析的一部分的用户定义的参数,这将返回位置8和下一个最接近的位置(在位置7的GG))。
将X3的返回与X1的返回相比较,显示不匹配,因而没有关联。
步骤7.分析单词X的下一个位置;然而,在文档A中没有单词X的再次出现。在此时,对语言A的单词X到语言B的单词AA建立关联频度一(1)。
步骤8.因为没有单词X再次出现,所以过程被递增一个单词且测试一个单词串。在这一情况下,所检查的词串是在文档A中的首两个单词“X Y”。对这一短语应用在步骤2-7所描述的同样的技术。
步骤9.通过考虑文档A,我们看到那里只有词串X Y的一次出现。在此时该增量过程结束,不进行数据库创建。因为已到达了某个端点,所以检查下一个单词(这一过程在对某个词串没有匹配时进行);在这一情况下在文档A的位置2的单词是“Y”。
步骤10.对单词“Y”应用步骤2-7的过程产生以下结果:
存在单词Y的两次出现(位置2和7),所以该数据库创建过程继续(再说一遍,如果Y在文档A中只出现一次,则将不检查Y);
在位置2的范围尺寸是(+/-)1单词;
对文档B(位置2,单词Y的第一次出现的位置)应用范围返回在文档B中位置1、2和3的结果;
在这些返回位置的对应外语单词是:AA、BB和CC;
运用前向排列产生以下对Y1的可能性:AA、BB、CC、AA BB、AA BB CC和BB CC;
分析Y的下一个位置(位置7);
在位置7的范围尺寸是(+/-)2单词;
对文档B(位置7)应用该范围返回在位置5、6、7和8的结果:EE、FF、GG和CC;
所有排列产生以下对Y2的可能性:EE、FF、GG、CC、EE FF、EE FF GG、EE FF GG CC、FF GG、FF GG CC和GG CC;
来自Y1的匹配结果返回CC作为唯一的匹配;
将对Y1和Y2的匹配组合产生CC作为对Y的一个关联频度。
步骤11.范围结尾增加:因为对单词Y的唯一可能的匹配(单词CC)出现在对Y的第一次出现的范围的结尾(CC出现在文档B中的位置3),所以在第一次出现时将该范围增加1,以返回位置1、2、3和4:AA、BB、CC和AA;或以下的前向排列:AA、BB、CC、AA BB、AA BB CC、AA BB CC AA、BB CC、BB CC AA和CC AA。应用这一结果也产生CC作为对Y的一个可能的译文。请注意因为返回的匹配是在对第一次出现(单词“Y”的基本出现)的范围的结尾才增加该范围;任何时候只要这一模式发生,则将进行范围结尾的增加,作为一个子步骤(或可供选择的步骤),以确保完整。
步骤12.由于在文档A中不存在“Y”的更多出现,所以该分析在文档A中增加一个单词,检查词串“Y Z”(在单词Y后的下一个单词)。增加到下一个串(Y Z)并重复本过程产生以下结果:
词串Y Z在文档A中出现两次:位置2和7。在第一次出现时对Y Z的可能性(Y Z1)是AA、BB、CC、AA BB、AA BB CC、BB CC;(注意,在所分析的语言A的词串变长时,可以可供选择地定义范围参数,以包括该范围尺寸的扩展。)
在第二次出现时对Y Z的可能性(Y Z2)是EE、FF、GG、CC、EE FF、EE FFGG、EE FF GG CC、FF GG、FF GG CC和GG CC;
匹配产生CC作为对词串Y Z的一个可能的关联;
扩展该范围(范围结尾的增加)对Y Z产生以下结果:AA、BB、CC、AA BB、AA BB CC、AA BB CC AA、BB CC、BB CC AA和CC AA。
应用这些结果也产生CC作为对词串Y Z的一个关联频度。
步骤13.由于在文档A中不存在“Y Z”的更多出现,所以该分析在文档A中增加一个单词,检查词串“Y Z X”(在文档A中位置3的单诃Z后的下一个单词)。增加到下一个串(Y Z X)并重复本过程(Y Z X在文档A中出现两次)产生以下结果:
对Y Z X的第一次出现的返回是在位置2、3、4和5;
排列是BB、CC、AA、EE、BB CC、BB CC AA、BB CC AA EE、CC AA、CC AAEE和AA EE;
对Y Z X的第二次出现的返回是在位置5、6、7和8;
排列是EE、FF、GG、CC、EE FF、EE FF GG、EE FF GG CC、FF GG、FF GGCC和GG CC;
将两者比较产生CC作为对词串Y Z X的一个关联频度;再说一遍,请注意EE作为一个可能的关联的返回被忽略了,因为它作为同一单词在两种情况中都出现(即,在同样位置)。
步骤14.增加到下一个词串(Y Z X W)只找到一次出现;所以该词串数据库创建完成,并检查下一个单词:Z(在文档A中的位置3)。
步骤15.对Z(它在文档A中出现3次)应用上面所描述的步骤,产生以下结果:
对Z1的返回是:AA、BB、CC、AA、EE、AA BB、AA BB CC、AA BB CC AA、AA BB CC AA EE、BB CC、BB CC AA、BB CC AA EE、CC AA、CC AA EE和AA EE;
对Z2的返回是:FF、GG、CC、FF GG、FF GG CC和GG CC;
将Z1和Z2比较产生CC作为对Z的一个关联频度;
如所定义的那样,Z3(位置10)在该范围中没有返回。但是,如果我们添加参数表示对每个语言A单词或词串必须至少有一个返回,则对Z的返回将是CC。
将对Z3与Z1的返回相比较产生CC作为对Z的一个关联频度。但是,这一关联并不计数,因为在单词位置8的CC已经在上面的Z2的关联中被计数过了。当某个重叠范围将使本过程双重计数某次出现时,本系统可以减少关联频度,以更准确地反映真实的出现次数。
步骤16.增加到下一个词串产生词串Z X,它在文档A中出现两次。对Z X应用上面所描述的步骤产生以下结果:
对Z X1的返回是:BB、CC、AA、EE、FF、BB CC、BB CC AA、BB CC AA EE、BB CC AA EE FF、CC AA、CC AA EE、CC AA EE FF、AA EE、AA EE FF和EE FF;
对Z X2的返回是:FF、GG、CC、FF GG、FF GG CC和GG CC;
比较这些返回产生词串Z X和CC之间的关联。
步骤17.再增加,下一个短语是Z X W。它只出现一次,所以检查在文档A中的下一个单词(X)。
步骤18.单词X已经在第一个位置检查过。然而,相对于其它文档,单词X的第二个位置还没有作为对单词X的可能的返回而检查过。因此现在如在单词X的第一次出现时一样操作(在第二个位置的)单词X,在该文档中向前进:
对X在位置4的返回产生:BB、CC、AA、EE、FF、BB CC、BB CC AA、BB CCAA EE、BB CC AA EE FF、CC AA、CC AA EE、CC AA EE FF、AA EE、AA EE FF和EE FF;
对X在位置9的返回产生:CC;
将位置9的结果和对位置4的结果比较产生CC作为对单词X的一个可能的匹配,并给予它一个关联频度。
步骤19.增加到下一个词串(因为在该文档中向前观看,X没有更多的出现以便与X的第二次出现相比较)产生词串X W。但是,该词串在文档A中没有出现多于一次,所以本过程转去检查下一个单词(W)。单词“W”在文档A中只出现一次,所以进行增加——不是增加到下一个词串,因为单词“W”只出现一次,而是增加到文档A中的下一个单词——“V”。单词“V”在文档A中只出现一次,所以检查下一个单词(Y)。单词“Y”在文档A中不出现在高于位置7的任何其它位置,所以检查下一个单词(Z)。单词“Z”在位置8后于位置10再次出现。
步骤20.对单词Z的第二次出现应用上面所描述的过程产生以下结果:
对Z在位置8的返回产生:GG、CC和GG CC;
对Z在位置10的返回产生:CC;
将位置10与位置8的结果比较不产生对单词Z的关联。
单词CC又一次作为一个可能的关联而被返回;但是,由于CC表示通过分析在位置8的Z和在位置10的Z而达到的同样单词位置,所以忽略该关联。
步骤21.增加一个单词产生词串ZX;该词串不再出现于文档A中任何其它(向前)的位置,所以本过程在文档A中的下一个单词——“X”重新开始。单词X不再出现于文档A中任何其它(向前)的位置,所以本过程重新开始。然而,已经到达文档A的结尾,本分析停止。
步骤22.结合来自上面的所有结果,并如所解释的那样减去重复,就列出最终的关联频度。
显然,没有足够的数据来对文档A中的单词和词串返回确实的结果。随着检查越多的包含具上面所检查的那些关联的单词和词串的文档对,关联频度将在统计上变得越可靠,这样语言A和B之间的单词或词串将建立起很强的关联,用于单词和词串的可能的译文。
本数据库创建方法与一种在本相关技术中已知类型的计算机系统一起运作的一个实施例的示例是以下程序:i>> <?$exclude_eng=array(′it′,′its′,′a′,′is′,′was′,′for′,′do′,′of′,′s′,′the′,′and′,′to′,′in′,′if′,′or′,′that′,′this′,′in the′,′are′,′of the′,′by′,′be′,′to the′,′as′,′on′,′an′,′at′,′with′,′from′,′he′,′will′,′has′,′not′,′by the′,′would′,′should′,′said′,′i′,′but′,′so′,′had′,′who′,′no′,′only′,′her′,′of a′,′been′,′and the′,′at the′);$exclude_fre=array (′il′,′elle′,′son′,′sa′,′ses′,′un′,′une′,′est′,′etait′,′pour′,′faire′,′ ′,′poser′,′de′,′le′,′la′,′les′,′et′,′ ′,′en′,′si′,′que′,′qui′,′celui′,′ce′,′ces′,′cet′,′cettes′,′dans le′,′dans la′,′sont′,′de la′,′du′,′
Figure A0282813200204
de′,′de′,′
Figure A0282813200205
′,′par′,′′,′
Figure A0282813200206
′,′au′,′aux′,′comme′,′si′,′enavant′,′sur′,′un′,′une′,′vers′,′avec′,′il′,′′,′
Figure A0282813200209
′,′devoir′, ′,′disait′,′disais′,′disent′,′je′,′mais′,′si′,′ou′,′avait′,′avais′,′avaient′,′qui′,′que′,′non′,′seulement′,′elle′,′et le′,′et la′,′et les′,′des′,′dans′);$exclude_spa=array(′lo′,′ella′,′su′,′un′,′una′,′es′,′fue′,′fui′,′por′,′para′,′hacer′,′hacen′,′ellos′,′ellas′,′de′,′el′,′la′,′los′,′y′,′hasta′,′en′,′si′,′ese′,′que′,′aquello′,′aquella′,′este′,′esto′,′ ′,′eres′,′son′,′del′,′cerca′,′allado′,′estar′,′ser′,′al′,′como′,′encendido′,′un′,′arroba′,′con′,′desde′,′ ′,′voluntad′,′tiene′,′hay′,′deber′,′dijo′,′yo′,′pero′,′sino′,′
Figure A0282813200213
′,′tan′,′o′,′
Figure A0282813200214
′,′quien′,′ ′,′no′,′
Figure A0282813200216
′,′solamente′,′la′,′ha sido′);$dir=″hebfre″;$dirdone=″hebfredone″;$lang=″.eng″;$olang=″.fre″;$table=″hebfre″;$languagecount= ″langcount″;$language=″lang″;$olanguagecount=″olangcount″;$olanguage=″olang″;#$debug=″true″;function getmicrotime(){list($usec,$sec)=explode(″″,microtime());return((float)$usec+(float)$sec);}$allstart=getmicrotime();$fp=fopen(″/usr/local/apache/log.txt″,″w+″);fputs($fp,″starting″.date(″H:i:s″).″<BR>\n″);$filelist=file(″http://128.241.244.166/list.php?dir=$dir&lang=$lang″);#change$temp=implode(″″,$filelist);$list=strtolower(trim($temp));$mainarray=explode (″\n″,$list);sort($mainarray);reset($mainarray);$filearray=array();$calc=0;for($t=0;$t<count($mainarray);$t++)#count($mainarray)change{if(file_exists(str_replace($lang,$olang,$mainarray[$t]))){$temp=$mainarray[$t];$temp1=file(″$mainarray[$t]″);unset($temp2);for($m=0;$m<count($temp1);$m++)
{
 if(strstr($temp1[$m],″....″))unset($temp1[$m]);
 $temp1[$m]=eregi_replace(″[[:space:]]+″,″″,strip_tags($temp1[$m]));  $temp1[$m]=urldecode(str_replace(″&htab;″,″″,$temp1[$m]));if($temp1[$m]!=″″)$temp2.=$temp1[$m];}$filearray[″$temp″]=utf8_encode($temp2);#######$temp=str_eplace($lang,$olang,$mainarray[$t]);$temp1=file(str_replace($lang,$olang,$mainarray[$t]));unset($temp2);for($m=0;$m<count($temp1);$m++){if(strstr($temp1[$m],″....″))unset($temp1[$m]);$temp1[$m]=eregi_replace(″[[:space:]]+″,″″,strip_tags($temp1[$m]));$temp1[$m]=urldecode(str_replace(″&htab;″,″″,$temp1[$m]));if($temp1[$m]!=″″)$temp2.=$temp1[$m];}$filearray[″$temp″]=utf8_encode($temp2);}}fputs($fp,date(″H:i:s″).″<BR>done loading fi1es into array.\n″);$addworde=″true″;$ctodo=count($mainarray);$t=0;for($t=0;$t<$ctodo;$t++){if(file_exists(str_replace($lang,$olang,$mainarray[$t])))$filexist=″true″;else unset($filexist);print″filee=$filexist-$mainarray[$t]\n″;if($debug == ″true″)$filexist=″true″;if($filexist==″true″){if($mainarray[$t]&& $debug!=″true″)
{
  system(″mv $mainarray[$t]/usr/local/apache/$dirdone/″.str_replace (″/usr/local/apache/$dir/″,″″,$mainarray[$t]));
 system(″mv ″.str_replace($lang,$olang,$mainarray[$t]).″/usr/local/apache/$dirdone/″.str_replace($lang,$olang,str_replace(″/usr/local/apache/$dir/″,″″,[$mainarray[$t])));
}$lng=$filearray[$mainarray[$t]];$olng=$filearray[str_replace($lang,$olang,$mainarray[$t])];$lngs=explode(″″,$lng);for($i=0;$i<count($lngs);$i++)
{
 if(!ereg(″[^a-zA-z]″,$lngs[$i]))$lngs[$i]=strtolower($lngs[$i]);
}$olngs=explode(″″,$olng);for($i=0;$i<count($olngs);$i++)
{
 if(!ereg(″[^a-zA-z]″,$olngs[$i]))$olngs[$i]=strtolower($olngs[$i]);
}   $sume=count($lnga);$sumh=count($olngs);if($sume>$sumh){$margin=round($sume/($sume-$sumh));$action=″add″;}elseif($sumh>$sume){$margin=(round($sumh/($sumh-$sume)));$action=″sub″;}else{$margin=1;$action=″sub″;}$number=count($lngs);for($j=$t+1;$j<$ctodo;$j++)# main loop,rotate between the filesto be checked.
{
 if(file_exists(str_replace($lang,$olang,$mainarray[$j])))# checkfilename match.
  {$file_start=getmicrotime();
   unset($array);
   $array=array();
   $lngtp=$filearray[$mainarray[$j]];
   $olngtp=$filearray[str_replace($lang,$olang,$mainarray[$j])];
   $lngstp=explode(″″,$lngtp);
   for($i=0;$i<count($lngstp);$i++)
    {
     if(!ereg (″[^a-zA-z]″,$lngstp[$i]))$lngstp[$i]=strtolower($lngstp[$i]);
    }
   $olngstp=explode (″″,$olngtp);
   for($i=0;$i<count($olngstp);$i++)
    {
     if(!ereg(″[^a-zA-z]″,$olngstp[$i]))$olngstp[$i]=strtolower($olngstp[$i]);
    }
   $sumetp=count($lngatp);
   $sumhtp=count($olngstp);
   if($sumetp>$sumhtp){$margintp=round($sumetp/($sumetp-$sumhtp));$action=″add″;}
   elseif($sumhtp<$sumetp){$margintp=(round($sumhtp/($sumhtp-$sumetp)));$action=″sub″;}
   else{$margintp=1;$action=″add″;}
   $numbertp=count($olngstp);
   if($debug==″true″)print date(″H-i-s″)。″<BR>\n″;
   for($i=0;$i<$number;$i++)#main loop,covers every space。
    {
     if($t==$j)$ni=$i+1;
     else $ni=0;
     for($n=$ni;$n<$numbertp;$n++)
      {
       unset($thesameh);
       $p=0;
       unset($theb);$langstart=getmicrotime();
       while($p<15 && $lngs[$i+$p]==$lngstp[$n+$p]&& $lngstp[$n+$p]1=″″)#check if the $n words match.          {
           $theb.=$lngs[$i+$p].″″;
           $theb1=trim($theb);
           if (!ereg(″[`-!@#$%^&*()<>_+=-?.,;:/\]″,$theb1)&& !ereg(″[0-9]″,substr($theb1,0,1))&& !ereg(″^[0-9]*$″,$theb1)
           && $theb1!=″″&& substr($theb1,0,1)!=″-″&& !ereg(″[0-9]″,substr($theb1,-1))
           && substr($theb1,-1)!=″-″&& substr($theb1,0 ,1)!=″′″&&substr($theb1,-1)!=″′″
           && $theb1 !=″′″&& $theb1 !=′″′&&!in_array($theb1,$exclude_eng))
           {
            $temp=$array[$theh1][″hebrew_c″];
            if(!$temp)#new,welcome
             {
              $array[$theb1][″hebrew_c″]  =″,$i ,″;
             }
            elseif(!strstr($temp,″,$i,″))#new,welcome
             {
              $array[$theb1][″hebrew_c″]=$temp.″$i,″;
             }
            $extra=floor($i/$margin);
            if($action==″add″){$extrasm=$i+$extra-45;$extralg=$i+$extra+45;}
            elseif($action==″sub″){$extrasm=$i-$extra-45;$extralg =$i-$extra+45;}
            if($extrasm<0)$extrasm=0;
            if($extralg>$sumh)$extralg=$sumh;$olangstart=getmicrotime();
            for($e=$extrasm;$e<$extralg;$e++)
             {
              $extran=floor($n/$margintp);
              if($action== ″add″){$bot=$n+$extran-45;$top=$n+$extran+45;}
              elseif($action==″sub″){$bot =$n-$extran-45;$top=$n-$extran+45;}
              if($bot<0)$bot=0;
              if($top>$sumhtp)$top=$sumhtp;
              unset($tbc);
              for($x=$bot;$x<$top;$x++)# check the english,10back and 10 forward.
               {
                unset($teng);
                if(($t==$j && $x>$e)||$t!=$j)# $n>$e &&
                 {
                  $a=0;
                  while($olngs[$e+$a]==$olngstp[$x+$a]&& $olngs[$e+$a]!=″″)
                   {
                    $teng.=″″.$olngs[$e+$a];
                    $teng=trim($teng);
                      if(!ereg(″[`~!@#$%^&*()<>_+=-?.,;:/\]″,$teng)&&!ereg(″[0-9]″,substr($teng,0,1))  &&!ereg(″^[0-9]*$″,$teng)
                      && $teng!=″″&& substr($teng,0,1)!=″-″&&!ereg(″[0-9]″,substr($teng,-1))
                      && substr($teng,-1)!=″-″&& substr($teng,0,1)!=″′″&& substr($teng,-1)!=″′″
                      && $teng !=″′″&& $teng !=′″′&&!in_array{$teng,$exclude_fre))
                     {
                      $temparray=array_keys($array[$theb1]);
                      if(in_array($teng,$temparray))
                       {
                        $temp=$array[$theb1][$teng];
                        if(!strstr(″$temp″,″,$x,″))# &&!strstr[″$temp1″,″,$e,″))
                         {
                          $array[$theb1][$teng]=$temp.″$x,″;
                         }
                      }
                       else
                      {
                       $array[$theb1][$teng]= ″,$x,″;
                      }
                    }
                   $a++;
                 }# end of while loop
               }
             }# end offor loop.
           }# end of new loop$olangend=getmicrotime();$time1=$olangend-$olangstart;#fputs($fp,″French word number $n of $numbertp took $time1\n″);
         }# end up to 5 hebrew together。
        $p++;
       }# end of while loop $p<15$langend=getmicrotime();$time2=$langend-$langstart;#fputs($fp,″English word number $i of $number took $time2\n″);
     }
   }
  if(count($array)>0)
   {$dbstart=getmicrotime();
    $stream=MYSQL_CONNECT(″127.0.0.1″,″root″);
    $tempheb=array_keys($array);
    for($i=0;$i<count($tempheb);$i++)
     {
      $lng=$tempheb[$i];
      if(substr_count($array[$lng][″hebrew_c″],″,″)-1>0)
       {
        $lngc=substr_count($array[$lng][″hebrew_c″],″,″)-1;
        $tempolng=array_keys($array[$lng]);
         $n=1;
         while($n<count($tempolng)&& count($tempolng)>1)
          {
           $olng=$tempolng[$n];
           $olngc=substr_count($array[$lng][$olng],″,″)-1;
           $query=″update $table set total=total+1,$languagecount=$languagecount+$lngc,$olanguagecount=$olanguagecount+$olngc,article=concat(article,\″,$mainarray[$j]\″)where(article not like′%$mainatray[$j]%′and $language=′″.addslashes($lng).″′and $olanguage=′″.addslashes($olng).″′)″;
           MYSQL(″brain″,$query,$stream)or die(″#2 Can′t $query″.MYSQL_ERROR());
           $num=MYSQL_AFFECTED_ROWS($stream);
           if($num==0)
            {
             $query=″insert ignore into $tablevalues(\″NULL\″,\″1\″,′″.addslashes($lng).″,″.addslashes($olng).″′,\″″.addslashes($lng).″\″,\″$lngc\″,\″″.addslashes($olng).″\″,\″$olngc\″,\″$mainarray [$j]\″)″;
             MYSQL(″brain″,$query,$stream)or die(″#3 Can′t $query″.MYSQL_ERROR());
           }
          $n++;
         }
       }
     }
    MYSQL_CLOSE($stream);$dbend=getmicrotime();$time=$abend-$dbstart;fputs ($fp,″db took $time\n″);
    }
   $file_end=getmicrotime();
  }
}}}$allend=getmicrotime();$time=$allend-$allstart;fputs($fp,″the whole shit took $time\n″);fputs($fp″final:″.date(″Y-m-d H:i:s″).″-$calc-<BR>\n″);fclose($fp);?>
如所示范的那样,这一实施例是用以创建关联的技术的代表。本发明的技术不必局限于语言翻译。在某种宽泛的意义上,这些技术将运用于可能有关联的任何两种同样观念的表达,因为外语翻译在其本质上仅仅存在为由不同单词或词串所表示的同样观念的成对的关联。因此,本发明可以应用于关联的数据、声音、音乐、视频或作为观念而存在的任何宽范围的概念,包括可以表示任何可感知(声音、视觉、嗅觉等)体验的观念。所要求的全部是本发明要分析两个实施例(在语言翻译中,实施例是文档;对于音乐,实施例可能是某种乐谱和表示同一作品声音频率的数字表现,等等)。
在另一实施例中,可以将在相关技术中众所周知的某些基于规则的算法结合到跨语言关联的学习中以处理某些就上下文和意义而言可互换(并且有时候可以有无限来源)的文本类,如名字、数字和日期。
而且,如果可用的跨语言文档不提供在统计上很重要的翻译结果,则用户可以检查对译文和其它关联的可能的选择,并对合适的选择批准和分级。
如所描述的那样,随着对关联频度分析越多的已翻译成对的文档,单词和词串之间的关联频度就变得越强。随着检查更多语言对的文档,本发明的方法与设备将开始根据那些与第三种语言具有共同关联但并不直接彼此关联的语言来填充语言对之间的“推论关联”。而且,当存在多种语言的翻译了的文档时,可以跨几种语言来分析共同关联返回,直到在所有之间只存在一个共同关联,而这就是译文。
当一对语言中的文本共享某个第三种语言的共同定义时,可以在该对语言的文本之间产生推论关联。文本可以是要翻译的文档的一部分或一段,如一个单词或短语。举例来说,如果没有足够的跨语言文本来将语言A的短语“aa dd pz”直接翻译成语言B的短语,则推论一个关联可以包括在语言C、D、E和F存在足够的跨语言文本以进行翻译时,将这一语言A的短语与语言C、D、E和F的该短语译文相比较,如表1中所示。而后,如果存在足够的跨语言文本以进行翻译,则可以将语言C、D、E和F的“aa dd pz”译文翻译成语言B,如表2中所示。推论语言A的短语“aa dd pz”和语言B的某个短语之间的关联进一步包括比较已经从语言C、D、E和F的“aa dd pz”译文翻译过来的语言B短语。某些已经从语言C、D、E和F的“aa dd pz”译文翻译过来的语言B短语可能是同样的,而在本发明的这一较佳实施例中这些将代表语言A短语“aa dd pz”的正确的语言B译文。如表2中所示,对语言B的语言C、D和F译文产生同样的语言B短语“UyTByM”,以提供正确的语言B译文。因此,可以在语言A的短语和其正确的语言B译文之间创建推论的关联。语言E翻译到语言B产生不同的语言B短语ZnVPiO。这可能指示语言E短语“153”具有多于一个的意义,或者语言B短语UyTByM和ZnVPiO是可互换的。
                      表1
  语言A   语言C   语言D   语言E   语言F
  aa dd pz   A1 d   zyp   153   1AAAA))$
                       表2
    语言 来自语言A“aa dd pz”的译文   到语言B的译文
    语言C     A1 d     UyTByM
    语言D     Zyp     UyTByM
    语言E     153     ZnVPiO
    语言F     1AAAA))$     UyTByM
以下是(在与一种在相关技术中已知类型的计算机系统一起运作时)提供一种方法的计算机程序的一个示例(其中这些语言的数据在本发明的某一实施例中被利用):
<?
$word=″united nations″;
$engspa_t=″engspa″;
$engfre_t=″hebfre″;
$frespa_t=″frespa″;
$c=1;
MYSQL_CONNECT(″128.241.244.166″,″root″);
$query=″select total,lang,langcount,olang,olangcount from $engfre_t where
olang=′$word_;
$result=MYSQL(″brain″,$query)or die (″Error #1-$query-″.MYSQL_ERROR());
$query1=″select lang from $engspa_t where olang=′$word′″;
$result1=MYgQL(″brain″,$queryl)or die(″Error #2-$query1-
″.MYSQL_ERROR());
for($i=0;$i<MYSQL_NUM_ROWS($result1);$i++)
{
 list($lang)=MYSQL_FETCH_ROW($result1);
 $in.=″,′″.addslashes($lang).″′″;
}
$in=substr($in,1);
$num=MYSQL_NUM_ROWS($result);
print″$in<BR><BR>\n″;
for($i=0;$i<$num;$i++)
{    
 list($total,$lang,$langc,$olang,$olangc)=MYSQL_FRTCH_ROW($result);
 print″$lang,″;
 $query2=″select cid from $frespa_t where olang=′″.addslashes($lang).″′
and lang in($in)″;
 $result2=MYSQL(″brain″,$query2)or die(″Error #3-$query2-
″.MYSQL_ERROR());
 if(MYSQL_NUM_ROWS($result2)>0)
  {
   $res.=″$i-$total,$lang,$langc,$olang,$olangc<BR>\n″;
   $c++;
  }
}
print  ″<BR><BR>$res″;
print″$c/″.MYSQL_NUM_ROWS($result);
?>
同样,如果人工归结存在的状态中的表达与另一种状态中的数据点的明确关联,并编录在数据库中,则这两种状态之间的转换将是可能的。举例来说,如果每个以某种形式、状态或语言表示的“观念”都被赋予一个到某种电磁波(频调)的关联,则将创建该观念的一个“电磁表现”。在给定数量的观念以相应的电磁表现被编码后,(以观念的形式的)数据就可以被翻译成电磁波并立即在传统电信基本架构中传输。当这些电磁波到达目标机器时,这些机器会将这些波合成成个别的组件,并借助这些关联(以及排序指令、如在此所描述的双重叠技术的运用和/或其它可能的方法),显现由这些电磁表现所表示的个别的观念。
2.观念转换方法与设备
本发明的另一个方面致力于提供一种用于从由第一种状态、形式或语言的数据构成的第一个文档创建由第二种状态、形式或语言的数据构成的第二个文档,其最终结果是该第一个和第二个文档都表示实质上同样的观念或信息的方法与设备,而这种方法与设备包括使用跨观念关联数据库。该翻译方法的所有实施例都利用一种双重叠技术,以获取观念从一种状态到另一种的准确翻译。相反的是,已有技术的翻译设备注重于个别的单词翻译或利用特殊的基于规则的代码来实现从第一种语言到第二种语言的翻译。本发明使用重叠技术使第二种语言的单词和词串能有机地联系在一起,并变成与用第二种语言来书写这些单词和短语原样的方式的在其正确上下文中的准确译文。
在本发明的一实施例中,将用于数据库创建的方法和重叠技术组合来提供准确的语言翻译。语言可以是任何的传统类型,并不必需局限于口头/书面语言。举例来说,转换可以包括计算机语言、特定的数据代码如ASCII等等。数据库是动态的;即数据库随着内容被输入该翻译系统而增长,并用前次所输入的内容不断地迭代翻译系统。本发明的较佳实施例使用某种计算设备,例如在已有技术中很容易可用的类型的个人计算机。但是,本系统不必需使用某种计算设备,并可以很容易地由其它手段来完成,包括手工创建数据库与翻译方法。
本发明可以在至少具有显示手段、输入方法、输出方法和处理器的普通计算机系统上使用。显示手段可以是在已有技术中很容易可用的任一种,例如阴极射线终端、液晶显示屏、平板显示器等等。处理器装置也可以是在已有技术中很容易可用并用于计算环境中的任一种,这样该装置就能提供来使计算机运行已执行本发明。最后,输入方法用来实现为建立跨关联数据库的目的而输入文档;如上面所描述的那样,用于转换到数字形式的特定的输入方法可以根据用户的需要而变化。
a.手工数据库创建和通过双重叠技术翻译
现在将描述一个如本发明所述的用于将文档从第一种语言翻译成第二种语言的方法与设备的实施例的示例,其中通过询问用户单词和词串的译文以及用双重叠技术自动产生段译文来发展跨语言数据库。
为描述较佳实施例的目的,将使用一个示例,其中英语的数据将翻译成希伯来语的数据。这些选择只是用于描述性的目的,并不意味着局限对第一种和第二种语言的选择。
按照本发明的一个较佳实施例,计算机系统运行来创建从英语到希伯来语的译文之间关联的数据库。该翻译方法至少包括以下步骤:
第一步,将英语的数据输入该计算机系统。
第二步,首先逐个单词检查所输入的所有英语单词。数据库将返回希伯来语的已知单词译文。如果译文未包括在数据库中,则该计算机系统将以某种方式运作,以询问用户来输入合适的译文。这样,如果数据库不知道对某个所输入的英语单词的希伯来语等价物,则计算机将要求用户提供合适的希伯来语等价物。而后用户将返回译文并将所述译文输入进数据库。在后续使用中,该计算机系统将以某种方式操作数据库,依靠由用户在某个较早时候的输入来得知译文。因此,在第二步中以其分解的状态(如词对词)来检查所输入的数据,并(依靠数据库操作)返回合适的译文,或者将合适的译文输入数据库。
第三步,以某种增加分解的段的方式来检查所输入的数据。举例来说,如果首先逐个单词地分解了数据,则本发明的翻译方法接着通过评价两个单词的串来检查所输入的数据。以某种与上面所描述的相似的方式,数据库再一次返回对两个单词的串的译文(如果已知道);如果不知道,则本翻译系统运行以询问用户来输入对所有可能的两个单词的串的合适译文。而后将所有重叠的两个单词的段存储到数据库中。举例来说,如果某个词串由四个单词构成,则数据库检查看其在内存中是否有已翻译的以下组合:1,2 2,3和3,4。如果没有,则其询问用户。请注意只有已对两个单词的串明确编码的译文才将作为准确的译文来返回,即使数据库依靠上面的第二步会必要地包含每个单词定义。
第四步,如果两个重叠的两单词英语串的希伯来语译文具有重叠的单词,则本系统以某种方式运行来组合这些重叠的段。去除重叠的冗余的希伯来语段,以提供由组合这两个重叠的英语串(并去除在英语重叠中的冗余)所创建的三个单词的英语串的连贯译文。将上面的步骤从1到某个无限数目(n)重复,以提供合适的译文。本翻译方法通过验证在重叠之上桥接两种语言的编码单词块的一致的串而自动工作。一旦数据库达到临界质量,则这些对在两种语言上一致的重叠桥的自动批准能提供一个以完美的准确性在两种语言间进行翻译的语言网络。
作为一个示例,请考虑英语短语“I want to buy a car”。在运行本发明的方法后,这一短语将被输入一台运行数据库的计算机。该计算机将运行来判断该数据库是否包括对以下单词的希伯来语等价物:“I”、“want”、“to”、“buy”、“a”和“car”。如果已经知道这样的等价物,则该计算机将返回这些希伯来语等价物。如果不知道这样的等价物,则该计算机将询问用户来提供合适的希伯来语译文,并存储这样的译文以便将来使用。接着,该计算机将以重叠方式将该句子分解成两个单词的段:“I want”、“want to”、“to buy”、“buy a”和“a car”。该计算机将运行以返回这些段的希伯来语等价物(即“I want”等的希伯来语等价物);如果不知道这样的希伯来语等价物,则该计算机将询问用户来提供合适的希伯来语译文,并存储这样的译文以便将来使用。
本发明接着将检查三个单词的段“I want to”、“want to buy”、“tobuy a”和“buy a car”。本发明此时在该过程中试图组合每一对其两个单词英语译文重叠的希伯来语译文,并组合来形成每个三单词英语译文的查询(如组合“I want”和“want to”以形成“I want to”)。如果希伯来语的段具有某个将它们联接起来的共同重叠,则本翻译方法无需任何用户干预,就自动批准该三个单词的英语词串作为一个到希伯来语的译文。如果这些希伯来语的段不重叠并不能组合,则询问用户一个准确的译文。在对三个单词的英语词串尝试合适的翻译后,该过程前进至四个单词的串,如此继续,试图通过跨语言重叠来自动解决译文的组合,直到完成所检查的段(在本例中,是整个短语“I want to buy a car”)。在经过这一分解后,本发明的方法再比较所返回的译文等价物,去除在重叠的段中的冗余,并将翻译了的短语输出给用户。
b.通过关联数据库和双重叠技术的文档翻译
按照另一较佳实施例,本发明可以通过使用如上所述的跨语言数据库以提供文档中单词和词串的词串译文,而后用上面所描述的跨语言双重叠技术组合重叠的第二种语言词串以提供该文档的译文,来将一个第一语言的文档翻译成第二种语言的文档。举例来说,请考虑一个能访问足够的跨语言文档以解析以下的以英语输入并要翻译成希伯来语的句子的数据库:“In additionto my need to be loved by all the girls in town,I always wanted to beknown as the best player to ever play on the New York state basketballteam”。
通过上面所描述的过程,该处理方法可以确定短语“In addition to myneed to be loved by all the girls”是以源文档的第一个单词开头并存在于数据库中的最大的来自源文档的词串。它在数据库中与希伯来语词串“benosaf ltzorech sheli lihiot ahuv al yeday kol habahurot”相关联。而后该过程将用上面所描述的方法确定以下的译文——即来自所要翻译(并存在于数据库中)的具有一个单词(或可以是多个单词)与以前所标识的英语词串重叠的最大的英语词串,以及对那些具有重叠段的重叠英语词串的两个希伯来语译文:“loved by all the girls in town”翻译成“ahuv al yeday kolhabahurot buir”;“the girls in town,I always wanted to be known”翻译成“habahurot buir,tamid ratzity lihiot yahua”;“I always wantedto be known as the best player”翻译成“tamid ratzity lihiot yahua bettorhasahkan hachi tov”;而“the best player to ever play on the New Yorkstate basketball team”翻译成“hasahkan hachi tov sh hay paam sihekbekvutzat hakadursal shel medinat new york”。
有了这些数据库的返回,本处理将以某种方式运作,以比较重叠的单词和词串,并去除冗余。这样,“In addition to my need to be loved by allthe girls”翻译成“benosaf ltzorech sheli lihiot ahuv al yeday kolhabahurot”;而“loved by all the girls in town”翻译成“ahuv al yedaykol habahurot buir”。利用本发明的技术,本系统将接受英语段“In additionto my need to be loved by all the girls”和“loved by all the girls intown”,返回希伯来语段“benosaf ltzorech sheli lihiot ahuv al yeday kolhabahurot”和“ahuv al yeday kol habahurot buir”,并确定重叠。
在英语中,短语是:“In addition to my need to be loved by all thegirls”和“loved by all the girls in town”。除去重叠产生:“In additionto my need to be loved by all the girls in town”。
在希伯来语中,短语是:“benosaf ltzorech sheli lihiot ahuv al yedaykol habahurot”和“ahuv al yeday kol habahurot buir”。除去重叠产生:“benosaf ltzorech sheli lihiot ahuv al yeday kol habahurot buir”。
而后本发明操作下一个分解的段,以继续该过程。在本例中,处理过程操作短语“the girls in town,I always wanted to be known”。系统解析英语段“In addition to my need to be loved by all the girls in town”和新的英语单词集“the girls in town,I always wanted to be known”。相对应的希伯来语单词集是“benosaf ltzorech sheli lihiot ahuv al yedaykol habahurot buir”和对应的希伯来语单词集“habahurot buir,tamidratzity lihiot yahua”。在英语中除去重叠操作如下:“In addition to myneed to be loved by all the girls in town”和“the girls in town,I alwayswanted to be known”成为“In addition to my need to be loved by all thegirls in town,I always wanted to be known”。在希伯来语中,重叠过程运行如下:“benosaf ltzorech sheli lihiot ahuv al yeday kol habahurotbuir”和“habahurot buir,tamid ratzity lihiot yahua”产生“benosafltzorech sheli lihiot ahuv al yeday kol habahurot buir,tamid ratzitylihiot yahua”。
本发明用所要翻译文档中余下的单词和词串继续这种操作。这样,在本较佳实施例的示例中,下面的英语词串是“In addition to my need to be lovedby all the girls in town,I always wanted to be known”和“I always wantedto be known as the best player”。由数据库对这些短语返回的希伯来语译文是“benosaf ltzorech sheli lihlot ahuv al yeday kol habahurot buir,tamid ratzity lihiot yahua”和“tamid ratzity lihiot yahua bettorhasahkan hachi tov”。除去英语重叠产生:“In addition to my need to beloved by all the girls in town,I always wanted to be known as the bestplayer”。除去希伯来语重叠产生:“benosaf ltzorech sheli lihlot ahuval yeday kol habahurot buir,tamid ratzity lihiot yahua bettor hasahkanhachi toy”。
继续该过程:下面的词串是“In addition to my need to be loved by allthe girls in town,I always wanted to be known as the best player”和“the best player to ever play on the New York state basketball team”。相对应的希伯来语短语是“benosaf ltzorech sheli lihiot ahuv al yeday kolhabahurot buir,tamid ratzity lihiot yahua bettor hasahkan hachi tov”和“hasahkan hachi tov sh hay paam sihek bekvutzat hakadursal shelmedinat new york”。除去英语重叠产生:“In addition to my need to beloved by all the girls in town,I always wanted to be known as the bestplayer to ever play on the New York state basketball team”。除去希伯来语重叠产生:“benosaf ltzorech sheli lihiot ahuv al yeday kolhabahurot buir,tamid ratzity lihiot yahua bettor hasahkan hachi tovsh hay paam sihek bekvutzat hakadursal shel medinat new york”,这就是所希望翻译的文本的译文。
在这一过程完成后,本发明运行来返回所翻译的最终文本并输出该文本。
应当注意,这些返回是数据库按照上面所描述的过程返回重叠关联的最终结果。通过该过程,本系统最终将不接受某个并不通过重叠而与邻近的第二种语言段具有自然合适的联接的第二种语言返回。如果有任何希伯来语返回不具有与邻近的希伯来语词串关联的准确重叠,则将否决它,并用与该邻近的希伯来语词串重叠的希伯来语词串关联来替代。
与一种在相关技术中已知类型的计算机系统一起运作时,本发明的一个较佳实施例的示例使用以下计算机程序:
<?function convert ($what,$olang){if($what==″′″) $what= ″\′″;if($what== ″\\″) return;$query= ″select sletter from ″. $olang .″letter where fletter= ′$what′″;$result=MYSQL(″minibush″,″$query″)or die(″*$what* -error #1 $query - ″MYSQL_ERROR());if(MYSQL_NUMROWS($result)>0){list($sletter)=MYSQL_FETCH_ROW($result);return $sletter;}else return stripslashes($what);}functionoverlap ($s,$mm,$mean,$tos,$osmean,$max,$dictionary_t,$lang,$olang,$spaceaddress,$longestolang){$tempmax=$max;${$olang}=$osmean;${$lang}=$mean;$mean=explode(″″,$mean);$osmean=explode (″″,$osmean);for($m=$mm;$m<count($mean);$m++){unset($string);for($l=$m;$l<count($mean);$l++)$string.=$mean[$l].″″;$sm=$s+count($mean);unset($nextwordmatch);   if($spaceaddress[$sm+1])$nextwordmatch=″$lang like′″.str_eplace(″%″,″″,trim($string.$spaceaddress[$sm])).″%′or″;$query1=″select$lang,$olang from $dictionary_t where $nextwordmatch$lang=′″.str_replace(″%″,″″,trim($string.$spaceaddress[$sm])).″′and $olang<>′′order by $lang desc,length($lang),$olang desc,length($olang)desc″;$result1=MYSQL(″minibush″,″$query1″)or die(″can′terror #2- ′$query1′″.MYSQL_ERROR());$t=0;while($t<MYSQL_NUMROWS($result1))# && $tempmatch !=″yes″){list(${″temp″.$lang},${″temp″.$olang})=MYSQL_FETCH_ROW($result1);
 $tempmean=explode(″″,${″temp″.$lang});
 $tempomean=explode(″″,${″temp″.$olang});
 $tg=$m;
 $tm=0;
 unset($tempmatch);
 while($tg<count($tempmean)+$m)
  {
   if(($spaceaddress[$s+$tg]==$tempmean[$tm])&&($tempmatch !=″no″))$tempmatch=″yes″;
   else $tempmatch=″no″;
   $tg++;
   $tm++;
  }
 if($temlpmatch== ″yes″&& substr_count($longestresult,″″)<=substr_count(${″temp″.$lang},″″))#checks if the new overlap is matching thetranslation request.
  {
   $longestresult =${″temp″.$lang};
   $omean=explode($tepomean[0],${$olang});
   $to=count($omean)-1;
   $tcheckb=substr(${″temp″.$olang},0,strlen ($tempomean[0]));
   if($osmean[$tos]==$tempomean[0]&& isset($osmean[$tos]))
    {
     if(count($mean)+count($tempmean)-1>$max)# singlewordoverlap
      {
       $max=$m+count($tempmean);
       $ns=$m;
       $tolang=${$olang}.substr(${″temp″.$olang},strlen($tempomean[0]));
       $overlap=″true″;
     }
     else $tempmnatch= ″no″;
    }
   elseif($osmean[($tos-1)]==$tempomean[0]&& $osmean[$tos]==$tempomean[1]&& isset($osmean[($tos-1)]))
    {
     if(count($mean)+count($tempmean)-1>$max)# singlewordoverlap
      {
       $max=$m+count($tempmean);
        $ns=$m;
        $tolang=${$olang}.substr(${″temp″.$olang},strlen($tempomean[0].″″.$tempomean[1]));
        $overlap=″true″;
      }
     else $tempmatch=″no″;
    }
   elseif($osmean[($tos-2)]==$tempomean[0]&& $osmean[($tos-1)]==$tempomean[1] && $osmean[$tos]==$tempomean[2] && isset($osmean[($tos-2)]))
    {
     if(count($mean)+count($tempmean)-1>$max)# singlewordoverlap
      {
       $max=$m+count($tempmean);
       $ns=$m;
       $tolang=${$olang}.substr($(″temp″.$olang},strlen($tempomean[0].″″.$tempomean[1].″″.$tempomean[2]));
       $overlap=″true″;
      }
     else $tempmatch=″no″ ;
    }
   elseif(substr_count(${$olang},″″)==0 && $tcheckb==trim(substr(${$olang},1)))
    {
     if(count($mean)+count($tempmean)-1>$max)# singlewordoverlap
      {
       $max=$m+count($tempmean);
       $ns=$m;
       $olangminus=substr(${″temp″.$olang},strlen(${$olang}));
       $tolang=${$olang}.″″.$olangminus;
       $overlap=″true″;
      }
     }
    elseif(substr_count(${$olang},″″)==0 &&substr_count(${″temp″.$olang},″″)==0)# english overlap hebrew one wordonly.
     {
      $max=$m+count($tempmean);
      $ns=$m;
      $tolang=${$olang}.″″.${″temp″.$olang};
      $overlap=″true″;
     }
    else
     {
      $tempmatch=″no″;
     }
    if($overlap==″true″)
     {
      $mmean-explode (″″.$tempmean[0],${$lang});
      $to=count($mmean)-1;
     $ttos=count($mean)-1;
     if($mmean[$to]&& $to>0)
      {
       $tcheck=substr(${″temp″.$lang},strlen ($tempmean[0])+1);
       if(substr($tcheck,0,strlen(trim($mmean[$to])))==trim($mmean[$to]))#overlapping
        {
         $tlang=${$lang}.substr($tcheck,strlen(trim($mmean[$to])));
        }
       }
      elseif($mean[$ttos]==$tempmean[0]&& $mean[$ttos])
       {
        $tlang=${$l=ng}.substr(${″temp″.$lang},strlen($tempmean[0]));
       }
      else{print″BIG ERROR″;exit;}
     }
    }
   $t++;
 }}if($overlap!=″true″)$overlap =″false″;if($tempmax==$max && $overlap!=″true″)$max=0;$array=array(″s″=>″$s″,″mm″=>count($mean),″mean″=>$tlang,″tos″=>substr_count($tolang,″″),″osmean″=>$tolang,″max″=>″$max″,″tolang″=>″$tolang″,″overlap″=>″$overlap″,″longestolang″=>″$longestolang″);return $array;}function translate($word,$lock ,$tags,$baselang){global $id_t,$prefix_t,$dictionary_t;$baselang=″hebrew″;if(!$word)return;if($transeng==″true″){if(ereg(″[a-zA-Z]″,$word))return $word;}if($baselang==″hebrew″){$spaceit=″true″;$emailend=″áòá_éú.+ǎ.éì″;}if($baselang==″japanese″)[$dictionary_=″dictionaryjap″;$spaceit=″false″;}if($baselang==″chinesesim″){$dictionary_t=″dictionarychnsim″;$spaceit=″false″;}MYSQL_CONNECT(″216.205.78.138″,″nobody″)or die(″can′t connect″.MYSQL_ERROR());$word=trim($word);if((stratr($word,hebrev($id_t).″,″)||atrstr($word,hebrev($id_t).″″)||substr($word,strlen($word)-strlen($id_t))==hebrev($id_t))&&isset($id_t)){$word=str_replace(hebrev($id_t),″″,$word);$systemsite=″true″;}if($word)################## www.something ##################{#####################if(strstr($word,″http://www.inhebrew.co.il/nsia.html″)){
$word=split(″=″,$word);
$word=split(″&″,$word[1]);
return $word[0];}#####################if(strstr($word,″://″)){$temp=explode(″://″,$word);$address.=$temp[1];}else $address=$word;$address=explode(″/″,$address);$addresscheck=$address[0];if(!ereg (″[a-zA-Zà-ú]″,$addresscheck))$addresscheck=$address[1];if(ereg(″[a-zA-Z]″,$addresscheck))
{
 $lang=″english″;
 $olang=$baselang;
 if(strtolower(substr($word,0,7))==″http://″){$word=substr($word,7);$pre=″ǎèè
Figure A0282813200391
://″;}
 if(strtolower(substr($word,0,8))==″https://″){$word=substr($word,8);$pre=″ǎèè
Figure A0282813200392
://″;}
 if(strtolower(substr($word,0,6))==″ftp://″){$word=substr($word,6);$pre=″
Figure A0282813200393
è
Figure A0282813200394
://″;}
}elseif($baselang==″hebrew″)
{
 $lang=″hebrew″;
 $olang=″english″;
 if(substr($word,0,8)==″ǎèè
Figure A0282813200395
://*″){$word=substr($word,8);$pre=″http://″;$upper=″true″;}
 elseif(substr($word,0,7)==″ǎèè ://″){$word=substr($word,7);$pre=″http://″;}
 elseif(substr($word,0,9)==″ǎèè ://*″){$word=substr($word,9);$pre=″https://″;$upper=″true″;}
 elseif(substr($word,0,8)==″ǎèè
Figure A0282813200398
://″){$word=substr($word,8);$pre=″https://″;}
 elseif(aubstr($word,0,7)== ″
Figure A0282813200399
è
Figure A02828132003910
://*″){$word=substr($word,7);$pre=″ftp://″;$upper=″true″;}
 elseif(substr($word,0,6)==″
Figure A02828132003911
è
Figure A02828132003912
://″){$word=substr($word,6);$pre=″ftp://″;}
 elseif(substr($word,0,1)==**″){$word=substr($word,1);$upper=″tre″;}
}elseif($baselang==″japanese″)
{
 $lang=″japanese″;
 $olang=″english″;
}  elseif($baselang==″chinesesim″){
$lang=″chinesesim″;
$olang=″english″;}$s=0;$tempreplace=strtolower($word);while($s<strlen($tempreplace)){
if(!ereg(″[à-úa-zA-Z0-9\′\″]″,$tempreplace[$s]))
 {
  $tempreplace=substr_replace($tempreplace,″$tempreplace[$s]″,$s,1)
  $s=$s+2;
 }
$s++;}$tempreplace=eregi_replace(″[[:space:]]+″,″″,$tempreplace);$spaceaddress=explode(″″,$tempreplace);$s=0;unset($space);$color=″red″;$counts=count($spaceaddress);$query=″select $lang,$olang from $dictionary_t where $lang=$tempreplace′″;$result=MYSQL(″minibush″,″$query″)or die(″can′t error #0.1-′$query′MYSQL_ERROR());if(MYSQL_NUMROWS($result)>0){
list(${$lang},${$olang})=MYSQL_FETCH_ROW($result);
$space=${$olang};
$counts=0;}while($counts>$s)# word between..{
$spaceaddress[$s]=trim($spaceaddress[$s]);
if($tags==″true″)
 {
  $open=″<font color=\″$color\″>″;
  $close=″</font>″;
  if($color==″red″)$color=″blue″;
  else $color=″red″;
 }
if(ereg(″[à-úa-zA-Z\′\″]″,$spaceaddress[$s]))
 {
  unset($restofaddress);
  for($i=$s;$i<$counts;$i++)$restofaddress.=″″.$spaceaddress[$i];
    $restofaddress=trim($restofaddress);
    $query=″select $lang,$olang from $dictionary_t where $lang=′$restofaddress′″;
    $result=MYSQL(″minibush″,″$query″)or die(″can′t error #0.2-′$query′″.MYSQL_ERROR());
   if(MYSQL_NUMROWS($result)==1)
    {
     list(${$lang),${$olang})=MYSQL_FETCH_ROW($result);
     $space.=″″.$open.${$olang}.$close;
     $space=trim($space);
     $counts=0;
    }
   else
    {
     $n=$s+1;
     unset($nextwordmatch);
     if($spaceaddress[$n])$nextwordmatch=″$lang like′″.str_replace(″%″,″″,$spaceaddress[$s]).″″.str_replace(″%″,″″,$spaceaddress[$n]).″%′or″;
     $query=″select $lang,$olang from $dictionary_t where$nextwordmatch $lang=′$spaceaddress[$s]′and $olang<>″order by $langdesc,length($lang),$olang desc,length($olang)desc″;
     $result=MYSQL(″minibush″,″$query″)or die(″can′t error #1-′$query′″。MYSQL_ERROR());
     if($match==″yes″)unset($match);
     if((MTSQL_NUMROWS($result)>0)&&($match !=″no″))
      {
       $n=0;
       $maximum=0;
       $maximumr=0;
       unset($finals);
       unset($finalsr);
         unset($longestolang);
         unset($longestlang);
       while($n<MYSQL_NUMROWS($result))# &&($match!=″yes″))
        {
         list(${$lang},${$olang})=MYSQL_FETCH_ROW($result);
         $mean=explode(″″,${$lang});
         $osmean=explode(″″,${$olang});
         $tos=count($osmean)-1;
         $g=0;
         unset($match);
         while($g<count($mean))
          {
           if(($spaceaddress[$s+$g]==$mean[$g])&&($match!=″no″))$match =″yes″;
           else $match=″no″;
           $g++;
          }
         if($match==″yes″)
          {
             if(strlen($longestolang)<strlen(${$olang}))$longestolang=${$olang};
             if(strlen($longestlang)<strlen(${$lang}))$longestlang=${$lang};
          unset($overlap);
          unset($max);
             $array=array();
             $array=overlap($s,1,${$lang},$tos,${$olang},$g,$dictionary_t,$lang,$olang,$spaceaddress,$longestolang);
             $max=$array[″max″];
             $tolang=$array[″tolang″];
             if($tolang)$wasbk=″true″;
             while($array[″overlap″]!=″false″&& count($spaceaddress)>$max)
              {
               $array=overlap($array[″s″],$array[″mm″],trim($array[″mean″]),$array[″tos″],trim($array[″osmean″]),$g,$dictionary_t,$lang,$olang,$spaceaddress,$longestolang);
               if($aray[″overlap″]==″true″)
                {
                 $max=$array[″max″];
                 $tolang=$array[″tolang″];
                 $wasok=″true″;
                }
               }
              if($max>$maximum && $max>0)
               {
                 $maximum=$max;
                 $finals=$tolang;
                }
               if($wasok!=″true″)
                {
                 if(strlen(${$lang})>$maximumr)
                  {
                   $maximumr=strlen(${$lang});
                   $gr=$g;
                   $finalsr=${$olang};
                  }
               }
           }
          $n++;
         }
        if($wasok==″true″)
         {$match =″true″;
         if(!strstr ($finals,$longestolang)&& $maximum<=(substr_count(″″,$longestolaung)+1))
          {
           #print″*″;
           if($s==0)$space=$space.$open.$longestolang.$close;
           else $space=$space.″″.$open.$longestolang.$close;
           $s=$s+substr_count($longestlang,″″)+1;
          }
         else
          {
           if($s==0)$space=$space.$open.$finals.$close;
           else $space=$space.″″.$open.$finals.$close;
          $s=$s+$maximum;
         }
        unset($maximum);
        unset($wasok);
       }
      elseif($finalsr)### testing new thing,what happens when apartial mach was found,(ie a s-ething,but a is not in the system).
       {
        if($s==0)$space=$space.$open.$finalsr.$close;
        else $space=$space.″″.$open.$finalsr.$close;
        $s=$s+$gr;
        unset($maximumr);
       }
      else # still is test phase.
       {
        if(ereg(″[a-zA-Zà-ú]″,$spaceaddress[$s]))$space=$space.″″$open.convert(substr($spaceaddress[$s],0,1),$baselang).$close;
        else $space=$space.$open.convert(substr($spaceaddress[$s],0,1),$baselang).$close;
        $spaceaddress[$s]=substr($spaceaddress[$s],1);
        if(!$spaceaddress[$s]||$spaceaddress[$s]==″0″)$s++;
        unset($match);
       }
     }
    else
     {
      if(ereg(″[a-zA-Zà-ú]″,$spaceaddress[$s]))$space=$space.″″.$open.convert(substr($spaceaddress[$s],0,1),$baselang).$close;
      else $space=$space.$open.convert(substr($spaceaddress[$s],0,1),$baselang).$close;
      $spaceaddress[$s]=substr($spaceaddress[$s],1);
      if(!$spaceaddress[$s]||$spaceaddress[$s]==″0″)$s++;
      unset($match);
      }
     if(!$spaceaddress[$s]||$spaceaddress[$s]==″0″)$s++;
    }
   }
  else
   {
    if(ereg(″[a-zA-Zà-ú]″,$spaceaddress[$s])){$space =$space.″″.$open.convert(substr($spaceaddress[$s],0,l),$baselang).$close;print″##″;}
    elseif(ereg(″[a-zA-Zà-ú]″,$spaceaddress[($s-1)]))$space=$space.″″.$open.convert(substr($spaceaddress[$s],0,1),$baselang).$close;
    else $space=$space.$open.convert(substr($spaceaddress[$s],0,1),$baselang).$close;
    $spaceaddress[$s]=substr($spaceaddress[$s],1);
    $s++;
    unset($match);
   }
 }# end of word between..
$url.=$space;   unset($temp);$count++;#next word.if(strstr($word,″@″))
{
 $revid=hebrev($id_t);
 if(strstr($url,″.″))$url=ereg_replace(″([a-zA-Z0-9/-/_/ ])@([a-zA-Z0-9/-/_/] *) ([/,])″,″\\1.\\2@inhebrew.co.il\\3″,″$url″);
 else $url=ereg_replace (″([a-zA-Z0-9/-/_/])@([a-zA-Z0-9/-/_/]*)″,″\\1.\\2@inhebrew.co.il″,$url);
 unset($systemsite);
}if(strstr($word,″@inhebrew.co.il″))
{
 $revid=hebrev($id_t);
 $url=ereg_replace (″([à-ú]).([/-/à-ú/-/]*)@$emailend″,″\\1@\\2$revid″,$url);
}if($systemsite== ″true″ &&!strstr(″$word″,″@″))
{
 if($end)return ″http://″. str_replace(″″,″″,$end).″. inhebrew.co.il/index.html?sub=″. substr($end,1);
 else return″http://″.str_replace(″″,″″,$url). ″.inhebrew.co.il″;
}if(ereg (″inhebrew.co.il/([a-zA-Z0-9/-]*)/index.html″,$word) &&!strstr($word,″inhebrew. co. il/sample/″))
{
 $end=substr($end,1);
 if(strstr($end,″/″))
  {
    return eregi_replace(″[[:space:]] +″,″″,str_replace(″ - ″,″-″,str_replace (″@″,″@″,($end))));
   }
  }
 return eregi_replace(″[[:space:]] +″,″″,str_replace(″-″,″-″,str_replace(″@″,″@″,$url)));
}}?>
上面的结合运用跨语言关联数据库和跨语言双重叠翻译技术的实施例具有其它潜在的应用,以改善试图将一种状态的信息等同到另一种状态的现存技术的质量,例如在相关技术中已知的语音识别软件和OCR扫描设备。这两种技术都可以靠本发明的翻译方法来测试其系统的结果。当不存在某个译文因而假设有一个错误时,可以提醒并询问用户,或者本系统可以编程成在数据库中对不重叠的译文查找能产生重叠译文的接近的替代物。当然,所有对用户的返回将转换回成原来的语言。
如那些相关领域的熟手所理解的那样,可以不背离本发明的精神与范围,而由熟练的从业者在上面所描述的设备与方法上作出许多改变。

Claims (7)

1、一种用于将一个第一种语言的文档段翻译成第二种语言的文档段的方法,其特征在于包含以下步骤:
提供该第一种语言的文档段与一个多种第三种语言之一的文档段之间的关联;
提供对应于一个第二种语言的段的多种第三种语言的样本段之间的关联;
将至少两个同样的样本段标识成一个第二种语言的推论关联段;以及
将该第二种语言的推论关联段与该第一种语言的文档段相关联。
2、如权利要求1所述的方法,其特征在于其中多种第三种语言包括至少一种第三种语言。
3、如权利要求2所述的方法,其特征在于进一步包括用某种标识等效语义的段的方法来将不同的样本段标识成可互换的段。
4、一种包括处理器、耦联到该处理器的存储器以及存储在该存储器中的程序的计算机设备,其特征在于该计算机被配置为执行该程序并执行以下步骤:
提供该第一种语言的文档段与一个多种第三种语言之一的文档段之间的关联;
提供对应于一个第二种语言的段的多种第三种语言的每个样本段之间的关联;
将至少两个同样的样本段标识成一个第二种语言的推论关联段;以及
将该第二种语言的推论关联段与该第一种语言的文档段相关联。
5、如权利要求4所述的计算机设备,其特征在于其中多种第三种语言包括至少一种语言。
6、如权利要求5所述的计算机设备,其特征在于被进一步被配置为执行通过标识等效语义段来将不同的样本段标识成可互换的段的步骤。
7、一种其上存储一个由计算机处理器执行的程序的计算机可读取存储媒质,其特征在于该程序用于执行以下步骤:
提供该第一种语言的文档段与一个多种第三种语言之一的文档段之间的关联;
提供对应于一个第二种语言的段的多种第三种语言的每个样本段之间的关联;
将至少两个同样的样本段标识成一个第二种语言的推论关联段;以及
将该第二种语言的推论关联段与该第一种语言的文档段相关联。
CNA028281322A 2001-12-21 2002-08-13 多语言数据库创建系统与方法 Pending CN1620658A (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US10/024,473 2001-12-21
US10/024,473 US20030083860A1 (en) 2001-03-16 2001-12-21 Content conversion method and apparatus
US10/116,047 US20030135357A1 (en) 2001-03-16 2002-04-05 Multilingual database creation system and method
US10/116,047 2002-04-05

Publications (1)

Publication Number Publication Date
CN1620658A true CN1620658A (zh) 2005-05-25

Family

ID=26698482

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA028281322A Pending CN1620658A (zh) 2001-12-21 2002-08-13 多语言数据库创建系统与方法

Country Status (11)

Country Link
US (1) US20030135357A1 (zh)
EP (1) EP1464007A4 (zh)
JP (1) JP2006500640A (zh)
KR (1) KR20040063995A (zh)
CN (1) CN1620658A (zh)
AU (1) AU2002327445A1 (zh)
CA (1) CA2471256A1 (zh)
EA (1) EA200400857A1 (zh)
IL (1) IL162576A0 (zh)
TR (1) TR200402394T2 (zh)
WO (1) WO2003058490A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100643801B1 (ko) * 2005-10-26 2006-11-10 엔에이치엔(주) 복수의 언어를 연동하는 자동완성 추천어 제공 시스템 및방법
US9514376B2 (en) * 2014-04-29 2016-12-06 Google Inc. Techniques for distributed optical character recognition and distributed machine language translation
US10191899B2 (en) 2016-06-06 2019-01-29 Comigo Ltd. System and method for understanding text using a translation of the text

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2096374B (en) * 1981-04-03 1984-05-10 Marconi Co Ltd Translating devices
JP3176059B2 (ja) * 1990-11-15 2001-06-11 キヤノン株式会社 翻訳装置
ES2101613B1 (es) * 1993-02-02 1998-03-01 Uribe Echebarria Diaz De Mendi Metodo de traduccion automatica interlingual asistida por ordenador.
GB2279164A (en) * 1993-06-18 1994-12-21 Canon Res Ct Europe Ltd Processing a bilingual database.
JP3408291B2 (ja) * 1993-09-20 2003-05-19 株式会社東芝 辞書作成支援装置
US5659765A (en) * 1994-03-15 1997-08-19 Toppan Printing Co., Ltd. Machine translation system
JP3356536B2 (ja) * 1994-04-13 2002-12-16 松下電器産業株式会社 機械翻訳装置
EP0834139A4 (en) * 1995-06-07 1998-08-05 Int Language Engineering Corp COMPUTER-ASSISTED TRANSLATION TOOLS
US6085162A (en) * 1996-10-18 2000-07-04 Gedanken Corporation Translation system and method in which words are translated by a specialized dictionary and then a general dictionary
US7483828B2 (en) * 2001-03-16 2009-01-27 Meaningful Machines, L.L.C. Multilingual database creation system and method
US7860706B2 (en) * 2001-03-16 2010-12-28 Eli Abir Knowledge system method and appparatus

Also Published As

Publication number Publication date
TR200402394T2 (tr) 2005-09-21
AU2002327445A1 (en) 2003-07-24
EP1464007A4 (en) 2006-05-24
WO2003058490A1 (en) 2003-07-17
KR20040063995A (ko) 2004-07-15
JP2006500640A (ja) 2006-01-05
EA200400857A1 (ru) 2005-12-29
US20030135357A1 (en) 2003-07-17
IL162576A0 (en) 2005-11-20
CA2471256A1 (en) 2003-07-17
EP1464007A1 (en) 2004-10-06

Similar Documents

Publication Publication Date Title
CN1672149A (zh) 词联想方法和装置
CN1204515C (zh) 自由格式数据处理的方法和设备
CN1110757C (zh) 处理两种文字对照的数据库的方法与装置
CN1620659A (zh) 多种语言的数据库创建系统和方法
CN1155906C (zh) 数据处理方法、系统、处理程序及记录媒体
CN1170240C (zh) 结构化文档检索显示方法和装置
CN1505786A (zh) 内容转换方法和装置
CN1266624C (zh) 学习支持系统
CN1689022A (zh) 可扩展标记语言流化转换器
CN1578954A (zh) 机器翻译
CN1608259A (zh) 机器翻译
CN1875345A (zh) 在编译过程中表示和检查程序组件的一致性的可扩展类型系统
CN1073276A (zh) 语言的中性对象
CN1567174A (zh) 对象表示和处理的方法及其装置
CN1609855A (zh) 查询优化系统和方法
CN1073540A (zh) 管理类方法名
CN1271545C (zh) 语言翻译系统
CN1734445A (zh) 用于对话的方法、装置和程序及其中存储程序的存储介质
CN101079026A (zh) 文本相似度、词义相似度计算方法和系统及应用系统
CN1750003A (zh) 信息处理装置,信息处理方法,和程序
CN1625739A (zh) 内容转换方法和装置
CN1331449A (zh) 用于将粘着法构成的文本或文档分段成词的字符串划分或区分的方法及相关系统
CN1761956A (zh) 基于片段的串行化系统与方法
CN1752963A (zh) 文档信息处理设备、文档信息处理方法及处理程序
CN1255213A (zh) 语言分析系统及方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication