专利名称:一种基于搜索引擎的计算器实现方法和装置的制作方法
一种基于搜索引擎的计算器实现方法和装置
技术领域:
本发明涉及互联网技术领域,特别涉及一种基于搜索引擎的计算器实现方法和装置。
背景技术:
随着互联网技术的不断发展以及信息的不断膨胀,人们对于网络信息的使用需求 越来越高。用户使用互联网获取信息时,会存在计算需求,例如用户想获取某一个算式的 计算结果。在现有技术中,当用户存在计算需求时,需要登录特定的网站,由该特定的网站 提供类似于windows计算器的面板点击式输入标准算式,然后通过后台的计算模块采用 JavaScript技术进行算式计算。然而,这些特定的网站通常并非用户熟知的网站,这就给用户的计算需求带来不 便,用户希望能够通过搜索引擎方便地获知计算结果。但是,目前的搜索引擎并不具备计算 功能,仅能够将包含用户所输入搜索词(query)的页面作为搜索结果返回给用户,即当用 户输入某一算式时,仅能够将包含该算式的页面作为搜索结果返回给用户,而不能够将该 算式的计算结果返回给用户。
发明内容有鉴于此,本发明提供了一种基于搜索引擎的计算器实现方法和装置,以便于通 过搜索引擎实现算式的计算功能。一种基于搜索引擎的计算器实现方法,该方法包括A、接收用户输入的搜索请求query ;B、对所述query进行需求识别,如果识别出所述query具有计算类需求,执行步骤 C;C、将所述query对应的标准算式提供给专用计算模块,并从所述专用计算模块获 取计算结果;D、将获取的所述计算结果包含在所述query的搜索结果中。其中,步骤B中对所述query进行需求识别具体包括 判断所述query与具有计算类需求的query模板是否匹配,如果匹配,则识别出所 述query具有计算类需求;否则,识别出所述query具有普通查询类需求;或者,判断所述query与具有计算类需求的query模板是否匹配,如果匹配,则识 别出所述query具有计算类需求;否则,识别出所述query具有普通查询类需求;默认所有query无论是否具有计算类需求,都具有普通查询类需求。其中,所述具有计算类需求的query模板是采用数据挖掘或人工的方式预先配置 的。步骤C中,将所述query对应的标准算式提供给专用计算模块具体包括Cl、将所述query作为转换对象进行自然语言处理,转换为标准算式;
C2、将所述标准算式提供给所述专用计算模块。更进一步地,如果识别出所述query具有计算类需求,在执行所述步骤C之前还包 括判断所述query具备纯数学计算类需求还是具备基于数学计算的换算类需求,如 果是纯数学计算类需求,则执行所述步骤C ;如果是基于数学计算的换算类需求,则执行步 骤F至步骤I ;F、提取所述query中的纯数学计算部分,保留单位部分并确定单位换算公式;G、将所述纯数学计算部分作为转换对象进行自然语言处理,转换为标准算式;H、将标准算式以及单位换算公式提供给专用计算模块进行计算,并从专用计算模 块获得计算结果;I、将获得的计算结果包含在所述query的搜索结果中。其中,所述从专用计算模块获得的计算结果为所述专用计算模块对标准算式进 行计算获得的计算结果与所述单位换算公式进行拼合后,再进行计算所获得的计算结果。具体地,将转换对象进行自然语言处理,转换为标准算式可以包括C11、对转换对象进行过滤,过滤掉不具备实际运算意义的词语;C12、根据预先设置的中文自然语言与数字之间的映射关系以及中文自然语言与 数学运算符之间的映射关系中的至少一种,将过滤处理后的转换对象转换为数字和数学运 算符的组合;其中,所述数学运算符包括以下中的一种或组合标准数学运算符和自定义 数学运算符;C13、如果所述数学运算符中仅包括自定义数学运算符,则确认步骤C12处理后的 转换对象为标准算式;否则,按照各自定义数学运算符对应的解析策略,对经过所述步骤 C12处理后的转换对象中的各自定义数学运算符按照解析优先级逐一进行解析,从而将转 换对象解析为标准算式。其中,所述不具备实际运算意义的词语是通过数据挖掘或人工的方式预先记录在 词典中的,包括以下词语计算、等于几、等于多少、得多少、得几、结果是什么;还包括以下字符逗号、句号、空格。具体地,所述中文自然语言与数学运算符之间的映射关系包括以下中的一种或组 合能够直接转换成标准数学运算符的词语与标准数学运算符的映射关系;搭配使用之前运算结果的连词与自定义数学运算符的映射关系;表示连接两个数字一起运算的连词与自定义数学运算符的映射关系;搭配连词一起构成运算的词语与自定义数学运算符的映射关系;表示数字在前面的一元运算符的词语与自定义数学运算符的映射关系;表示二元运算符的词语与自定义数学运算符的映射关系;与运算符搭配使用的动词与自定义数学运算符的映射关系;表示冗余运算符的词语与自定义数学运算符的映射关系;表示数字在后面的一元运算符的词语与自定义数学运算符的映射关系;以及,需要转义的词语与自定义数学运算符的映射关系。
其中,各自定义数学运算符的解析优先级从高到低顺序为解析优先级8 表示数字在后面的一元运算符的词语所映射的自定义数学运算 符;解析优先级7 搭配使用之前运算结果的连词所映射的自定义数学运算符;解析优先级6 表示数字在前面的一元运算符的词语所映射的自定义数学运算 符、除了 “除”之外表示二元运算符的词语所映射的自定义数学运算符、与运算符搭配使用 的动词所映射的自定义数学运算符;解析优先级5 表示连接两个数字一起运算的连词所映射的自定义数学运算符、 搭配连词一起构成运算的词语所映射的自定义数学运算符;解析优先级4 表示二元运算符的词语中,“除”所映射的自定义数学运算符;解析优先级3 需要转义的词语所映射的自定义数学运算符;解析优先级2 表示冗余运算符的词语所映射的自定义数学运算符。上述搭配连词一起构成运算的词语所映射的自定义数学运算符由指示配合关系 的运算符和标准运算符构成;表示数字在前面的一元运算符的词语所映射的自定义运算符由指示倒序关系的 运算符和标准运算符构成;表示数字在后面的一元运算符的词语所映射的自定义运算符由指示倒序关系的 运算符和标准运算符构成;表示连接两个数字一起运算的连词所映射的自定义数学运算符为指示配合关系 的运算符。具体地,所述专用计算模块对标准算式的计算方法可以包括J1、接收标准算式;J3、自左至右地读取标准算式,对当前读取到的符号执行步骤J4 ;J4、判断所述当前读取到的符号是数字还是运算符,如果是数字,执行步骤J5 ;如 果是运算符,执行步骤J6;J5、将所述当前读取到的符号压入操作数栈,转至步骤J12 ;J6、根据所述当前读取到的符号,或者,根据所述当前读取到的符号与运算符栈中 当前栈顶运算符的运算优先级状况,执行相应的处理,具体为若所述当前读取到的符号为 左括号,则执行步骤J8 ;若所述当前读取到的符号为右括号,则执行步骤J9 ;若所述当前 读取到的符号为结束符,则执行步骤JlO ;若当前读取到的符号不是左括号、右括号和结束 符,且当前读取到的符号的运算优先级不高于运算符栈中当前栈顶运算符的运算优先级, 则执行步骤J7;若所述当前读取到的符号不是左括号、右括号和结束符,且当前读取到的 符号的运算优先级高于运算符栈中当前栈顶运算符的运算优先级,则执行步骤J8;J7、根据运算符栈中当前栈顶运算符的操作性质,从操作数栈中弹出相应个数的 数字,并从运算符栈中弹出当前栈顶运算符,利用弹出的运算符和数字进行运算,将计算结 果压入操作数栈,继续针对当前读取到的符号转至步骤J6 ;J8、将所述当前读取到的符号压入运算符栈,转至步骤J12 ;J9、循环执行以下操作根据运算符栈中当前栈顶运算符的操作性质,从操作数栈 中弹出相应个数的数字,并弹出运算符栈中的当前栈顶运算符,利用弹出的运算符和数字
12进行运算,将计算结果压入操作数栈;直到从运算符栈中弹出左括号时,转至步骤J12 ;J10、循环执行以下操作根据运算符栈中当前栈顶运算符的操作性质,从操作数 栈中弹出相应个数的数字,并弹出运算符栈中的当前栈顶运算符,利用弹出的运算符和数 字进行运算,将计算结果压入操作数栈;直到运算符栈为空后,执行步骤JII ;J11、最终操作数栈栈顶的数字为所述标准算式的计算结果,结束所述专用计算模 块对标准算式的计算流程;J12、判断标准算式是否读取完毕,如果否,继续读取标准算式的下一个符号,转至 步骤J4;否则,转至步骤J9。更进一步地,在所述步骤Jl和步骤J3之间还包括J2、判断所述标准算式是否包含非标准数学算式的符号,如果是,结束所述专用计 算模块对标准算式的计算流程;如果否,继续执行所述步骤J3。更优地,在所述步骤J4中,如果判断出所述当前读取到的符号是数字,则该方法 进一步包括将所述当前读取到的数字作为一个表达式压入表达式栈;在所述步骤J7、J9和JlO中,如果从所述运算符栈中弹出运算符,则该方法进一步 包括判断弹出的运算符是否为左括号,如果否,则从所述表达式栈中弹出相应个数的 表达式,利用所述弹出的运算符以及所述表达式栈弹出的表达式拼装成一个新的表达式后 压入所述表达式栈;如果所述弹出的运算符为左括号,则进一步判断是否从所述运算符栈弹出过上一 个运算符,弹出的上一个运算符是否也为左括号以及所述表达式栈当前栈顶的表达式开头 是否左括号,如果从所述运算符栈弹出过上一个运算符,弹出的上一个运算符不是左括号 且所述表达式栈当前栈顶的表达式开头不是左括号,则从所述表达式栈中弹出一个表达 式,将该表达式前后加上括号后作为一个新的表达式压入所述表达式栈;否则,保持所述表 达式栈不变;在步骤Jll中结束所述专用计算模块对标准算式的计算流程时,确定所述表达式 栈中的表达式为标准表达式;步骤D中所述搜索结果中包含所述计算结果和所述标准表达式的组合。另外,在执行所述步骤J4之前,该方法还包括判断所述当前读取到的符号是否 属于读取的上一符号的合法后继类型,如果是,继续对所述当前读取到的符号执行所述步 骤J4;否则,确定标准算式不合法,结束所述专用计算模块对标准算式的计算流程。更优地,在读取标准算式的第一个符号之前,该方法还包括向所述运算符栈压入 一个虚拟左括号;所述虚拟左括号的处理优先级与左括号相同,当从运算符栈弹出该虚拟左括号 时,不做任何处理;在所述步骤J12判断出标准算式读取完毕,且在转至步骤J9之前还包括设定当 前读取到的符号为右括号。所述步骤B中如果识别出所述query具有普通查询类需求,则执行以下步骤E、将包含query中关键词的页面结果包含在所述query的搜索结果中。如果既识别出所述query具有计算类需求又识别出所述query具有普通查询类需求,则该方法还包括将搜索结果中包含的计算结果和页面结果按照识别出所述query的需求强度顺 序进行排序。一种基于搜索引擎的计算器实现装置,该装置包括请求接收单元、需求识别单 元、第一处理单元和第一结果产生单元;所述请求接收单元,用于接收用户输入的搜索请求query并提供给所述需求识别 单元;所述需求识别单元,用于对所述query进行需求识别,如果识别出所述query具有 计算类需求,则将所述query提供给所述第一处理单元;所述第一处理单元,用于将所述需求识别单元提供的query所对应的标准算式提 供给专用计算模块;所述第一结果产生单元,用于从所述专用计算模块获取计算结果,将该计算结果 包含在所述query的搜索结果中。其中,所述需求识别单元判断所述query与具有计算类需求的query模板是否匹 配,如果匹配,则识别出所述query具有计算类需求;否则识别出所述query具有普通查询 类需求;或者,所述需求识别单元判断所述query与具有计算类需求的query模板是否匹 配,如果匹配,则识别出所述query具有计算类需求;并且,默认所有query无论是否具有计 算类需求,都具有普通查询类需求;其中,所述具有计算类需求的query模板是采用数据挖掘或人工的方式预先配置 的。所述第一处理单元具体将接收到的所述query作为转换对象进行自然语言处理, 转换为标准算式,将所述标准算式提供给所述专用计算模块。更进一步地,该装置还包括第二处理单元和第二结果产生单元;所述需求识别单元在识别出所述query具有计算类需求时,进一步判断所述 query具备纯数学计算类需求还是具备基于数学计算的换算类需求,如果是纯数学计算类 需求,则将所述query提供给所述第一处理单元;如果是基于数学计算的换算类需求,则将 所述query提供给所述第二处理单元;所述第二处理单元,用于提取所述query中的纯数学计算部分,保留单位部分并 确定单位换算公式,将所述纯数学计算部分发送给所述第一处理单元,将单位换算公式发 送给所述专用计算模块;所述第一处理单元,还用于将所述第二处理单元提供的所述纯数学计算部分作 为转换对象进行自然语言处理,转换为标准算式,并将该标准算式提供给所述专用计算模 块;所述第二结果产生单元,用于从所述专用计算模块获得计算结果,将获得的计算 结果包含在所述query的搜索结果中。其中,从所述专用计算模块获得的计算结果为所述专用计算模块对标准算式进 行计算获得的计算结果与所述单位换算公式进行拼合后,再进行计算所获得的计算结果。具体地,所述第一处理单元可以包括过滤处理子单元、符号转换子单元和符号解析子单元;所述过滤处理子单元,用于对转换对象进行过滤,过滤掉不具备实际运算意义的 词语;所述符号转换子单元,用于根据预先设置的中文自然语言与数字之间的映射关系 以及中文自然语言与数学运算符之间的映射关系中的至少一种,将所述过滤处理子单元处 理后的转换对象转换为数字和数学运算符的组合;其中,所述数学运算符包括以下中的一 种或组合标准数学运算符和自定义数学运算符;所述符号解析子单元,用于如果所述数学运算符中仅包括自定义数学运算符,则 确认所述符号转换子单元处理后的转换对象为标准算式;否则,按照各自定义数学运算符 对应的解析策略,将所述符号转换子单元处理后的转换对象中的各自定义数学运算符按照 解析优先级逐一进行解析,从而将转换对象解析为标准算式。所述不具备实际运算意义的词语是通过数据挖掘的方式或人工的方式预先记录 在词典中的,包括以下词语计算、等于几、等于多少、得多少、得几、结果是什么;还包括以下字符逗号、句号、空格。其中,所述中文自然语言与数学运算符之间的映射关系包括以下中的一种或组 合能够直接转换成标准数学运算符的词语与标准数学运算符的映射关系;搭配使用之前运算结果的连词与自定义数学运算符的映射关系;表示连接两个数字一起运算的连词与自定义数学运算符的映射关系;搭配连词一起构成运算的词语与自定义数学运算符的映射关系;表示数字在前面的一元运算符的词语与自定义数学运算符的映射关系;表示二元运算符的词语与自定义数学运算符的映射关系;与运算符搭配使用的动词与自定义数学运算符的映射关系;表示冗余运算符的词语与自定义数学运算符的映射关系;表示数字在后面的一元运算符的词语与自定义数学运算符的映射关系;以及,需要转义的词语与自定义数学运算符的映射关系。上述各自定义数学运算符的解析优先级从高到低顺序为解析优先级8:表示数字在后面的一元运算符的词语所映射的自定义数学运算 符;解析优先级7 搭配使用之前运算结果的连词所映射的自定义数学运算符;解析优先级6:表示数字在前面的一元运算符的词语所映射的自定义数学运算 符、除了 “除”之外表示二元运算符的词语所映射的自定义数学运算符、与运算符搭配使用 的动词所映射的自定义数学运算符;解析优先级5 表示连接两个数字一起运算的连词所映射的自定义数学运算符、 搭配连词一起构成运算的词语所映射的自定义数学运算符;解析优先级4 表示二元运算符的词语中,“除”所映射的自定义数学运算符;解析优先级3 需要转义的词语所映射的自定义数学运算符;解析优先级2 表示冗余运算符的词语所映射的自定义数学运算符。
其中,搭配连词一起构成运算的词语所映射的自定义数学运算符由指示配合关系 的运算符和标准运算符构成;
表示数字在前面的一元运算符的词语所映射的自定义运算符由指示倒序关系的 运算符和标准运算符构成;表示数字在后面的一元运算符的词语所映射的自定义运算符由指示倒序关系的 运算符和标准运算符构成;表示连接两个数字一起运算的连词所映射的自定义数学运算符为指示配合关系 的运算符。具体地,所述专用计算模块可以包括操作数栈、运算符栈、算式接收子模块、算式 读取子模块、第一判断子模块、识别处理子模块、计算处理子模块、第二判断子模块和结果 获取子模块;所述算式接收子模块,用于接收标准算式;所述算式读取子模块,用于自左至右地读取标准算式,将当前读取到的符号发送 给所述第一判断子模块;所述第一判断子模块,用于判断所述当前读取到的符号是数字还是运算符,如果 是数字,向计算处理子模块发送第一执行通知;如果是运算符,将所述当前读取到的符号发 送给识别处理子模块;所述识别处理子模块,用于对所述当前读取到的符号,或者,对所述当前读取到的 符号与运算符栈中当前栈顶运算符的运算优先级状况进行识别,若所述当前读取到的符号 为左括号,则向所述计算处理子模块发送第三执行通知;若所述当前读取到的符号为右括 号,则向所述计算处理子模块发送第四执行通知;若所述当前读取到的符号为结束符,则向 所述计算处理子模块发送第五执行通知;若所述当前读取到的符号不是左括号、右括号和 结束符,且当前读取到的符号的运算优先级不高于运算符栈中当前栈顶运算符的运算优先 级,则向所述计算处理子模块发送第二执行通知;若所述当前读取到的符号不是左括号、右 括号和结束符,且当前读取到的符号的运算优先级高于运算符栈中当前栈顶运算符的运算 优先级,则向所述计算处理子模块发送第三执行通知;所述计算处理子模块,用于接收到所述第一执行通知后,将所述当前读取到的符 号压入操作数栈,并向所述第二判断子模块发送判断通知;接收到所述第二执行通知后,根 据运算符栈中当前栈顶运算符的操作性质,从操作数栈中弹出相应个数的数字,并从运算 符栈中弹出当前栈顶运算符,利用弹出的运算符和数字进行运算,将计算结果压入操作数 栈,触发所述识别处理子模块继续执行所述识别的操作;接收到所述第三执行通知后,将所 述当前读取到的符号压入运算符栈,并向所述第二判断子模块发送判断通知;接收到所述 第四执行通知后,循环执行操作S,直到从运算符栈中弹出左括号时,向所述第二判断子模 块发送判断通知;接收到所述第五执行通知后,循环执行操作S,直到运算符栈为空后,向 所述结果获取子模块发送获取通知;所述第二判断子模块,用于接收到判断通知后,判断标准算式是否读取完毕,如果 否,触发所述算式读取子模块继续读取所述标准算式中的下一个符号;否则,向所述计算处 理子模块发送第四执行通知;所述结果获取子模块,用于接收到所述获取通知后,获取操作数栈栈顶的数字作为所述标准算式的计算结果;所述操作S为根据运算符栈中当前栈顶运算符的操作性质,从操作数栈中弹出 相应个数的数字,并弹出运算符栈中的当前栈顶运算符,利用弹出的运算符和数字进行运 算,将计算结果压入操作数栈。较优地,所述专用计算模块还包括第一合法判断子模块,用于判断所述算式接收 子模块接收到的标准算式是否包含非标准数学算式的符号,如果是,禁止所述算式读取子 模块读取所述标准算式;如果否,允许所述算式读取子模块读取该标准算式。更优地,所述专用计算模块还包括表达式栈、表达式处理子模块以及结果组合子 模块;所述表达式处理子模块,用于在所述第一判断子模块判断出所述当前读取到的符 号是数字时,将所述当前读取到的数字作为一个表达式压入所述表达式栈;在所述计算处 理子模块从所述运算符栈中弹出运算符时,判断弹出的运算符是否为左括号,如果否,则从 所述表达式栈中弹出相应个数的表达式,利用所述弹出的运算符以及所述表达式栈弹出的 表达式拼装成一个新的表达式后压入所述表达式栈;如果判断出所述弹出的运算符为左括 号,则进一步判断是否从所述运算符栈弹出过上一个运算符,弹出的上一个运算符是否也 为左括号以及所述表达式栈当前栈顶的表达式开头是否为左括号,如果从所述运算符栈弹 出过上一个运算符,弹出的上一个运算符不是左括号且所述表达式栈当前栈顶的表达式开 头不是左括号,则从所述表达式栈中弹出一个表达式,将该表达式前后加上括号后作为一 个新的表达式压入所述表达式栈;否则,保持所述表达式栈不变;所述计算处理子模块,还用于在所述运算符栈为空时,向所述结果组合子模块发 送组合通知;所述结果组合子模块,用于接收到所述组合通知后,确定所述表达式栈中的表达 式为标准表达式,并将所述标准表达式和所述结果获取子模块获取的计算结果进行组合后 包含在所述query的搜索结果中。更进一步地,所述专用计算模块还包括第二合法判断子模块,用于判断所述算式读取子模块当前读取到的符号是否属于 读取的上一符号的合法后继类型,如果是,允许所述第一判断子模块执行判断所述当前读 取到的符号是数字还是运算符的操作;否则,确定标准算式不合法,禁止所述第一判断子模 块执行判断所述当前读取到的符号是数字还是运算符的操作。另外,所述计算处理子模块,还用于在所述算式读取子模块读取标准算式的第一 个符号之前,向所述运算符栈压入一个虚拟左括号;当从所述运算符栈弹出所述虚拟左括 号时,不做任何处理;所述虚拟左括号的处理优先级与左括号相同;所述第二判断子模块在判断出标准算式读取完毕时,还用于设定当前读取到的符 号为右括号。该装置还包括普通搜索单元;所述需求识别单元如果识别出所述query具有普通查询类需求,则将所述query 提供给所述普通搜索单元;所述普通搜索单元,用于将包含所述query中关键词的页面结果包含在所述 query的搜索结果中。
更进一步地,该装置还包括排序处理单元;如果所述需求识别单元既识别出所述query具有计算类需求又识别出所述query 具有普通查询类需求,则将识别出所述query的需求强度提供给所述排序处理单元;所述排序处理单元,用于将搜索结果中包含的计算结果和页面结果按照识别出所 述query的需求强度顺序进行排序。由以上技术方案可以看出,通过本发明,能够对用户输入的query进行需求识别, 确定该query是否具有计算类需求,并将具有计算类需求的query所对应的标准算式发送 给专业计算模块进行计算,然后将专业计算模块的计算结果包含在该query对应的搜索结 果中,从而实现通过搜索引擎实现算式的计算功能。
图1为本发明实施例一提供的主要方法流程图;图2为本发明实施例二提供的详细方法流程图;图3为本发明实施例三提供的将query转换为标准算式的方法流程图;图4为本发明实施例四提供的专业计算模块的计算方法流程图;图5为本发明实施例五提供的装置结构示意图;图6为本发明实施例六提供的专用计算模块的结构示意图。
具体实施方式为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对 本发明进行详细描述。首先通过实施例一对本发明提供的主要方法进行描述。实施例一、如图1所示,本发明实施例一提供的主要方法可以包括以下步骤步骤101 接收用户输入的query。本发明提供的方法可以应用于浏览器-搜索引擎服务器架构,当浏览器获取到用 户输入的query后,将该query发送给搜索引擎服务器,搜索引擎服务器接收浏览器发送来 的query后,开始执行本流程。步骤102 对用户输入的query进行需求识别,如果识别出该query具有计算类需 求,则执行步骤103 ;如果识别出该query具有普通查询类需求,则执行步骤104。如果识别出该query具有计算类需求,则搜索引擎可以通过执行步骤103将该 query对应的计算结果返回给用户;但某些情况下,query除了具有计算类需求的同时,也 可能同时被识别出具有普通查询类需求,则在执行步骤103的同时,也执行步骤104,然后 将该query对应的计算结果以及普通类查询结果都返回给用户。在本步骤中,识别出该query具有计算类需求时,还可以进一步识别是纯数学计 算类需求还是基于数学计算的换算类需求。对query进行需求识别的具体方式将在实施例 二中进行详细描述。步骤103 将该query对应的标准算式提供给专用计算模块,从专用计算模块获取 计算结果,并将获取的计算结果包含在该query的搜索结果中,执行步骤105。
在本步骤中,可以首先判断用户输入的query是否为标准算式,如果是标准算式, 则直接将该标准算式提供给专用计算模块进行计算;如果不是标准算式,例如是中文自然 语言算式,则首先对该query进行自然语言处理,将该query转换为标准算式后,再提供给 专用计算模块进行计算。将query转换为标准算式的方法将在实施例三中进行详细描述。步骤104 将包含query中关键词的页面结果包含在该query的搜索结果中,执行 步骤105。如果用户输入的query并不具有计算需求,即仅是普通查询类需求,则搜索引擎 就按照现有的自然语言处理逻辑,获取该query的关键词,利用关键词查询搜索引擎的数 据库,将包含该query的关键词的页面包含在该query的搜索结果中。步骤105 将该query的搜索结果返回给用户。如果用户输入的query仅具有普通查询类需求,则在步骤105中返回给用户的搜 索结果中仅包含普通的查询类结果。如果用户输入的query具有计算类需求,则返回给用 户的搜索结果中可以仅包含步骤103获取的计算结果;或者,也可以包含计算结果的同时, 也包含普通查询类结果。至此实施例一所示流程结束,下面通过实施例二对本发明所提供的上述方法进行 详细描述。实施例二、图2为本发明实施例二提供的详细方法流程图,如图2所示,该方法可以具体包括 以下步骤步骤201 接收用户输入的query。步骤202 对用户输入的query进行需求识别,如果识别出该query具有计算类需 求,执行步骤203 ;如果识别出该query具有普通查询类需求,执行步骤209。在本发明实施例中会采用数据挖掘的方式或者人工的方式预先配置具有计算类 需求的query模板,如果用户输入的query与具有计算类需求的query模板匹配,则可以识 别出该query具有计算类需求。如果用户输入的query与具有计算类需求的query模板不匹配,则可以识别出该 query具有普通查询类需求,也可以无论query是否具有计算累需求都默认所有query都具 有普通查询类需求。其中,具有计算类需求的query模板可以采用词典结合匹配规则的形式。例如 预先配置包含数字、运算符、单位等的词典,匹配规则可以诸如query命中词典中的一元 运算符以及至少一个数字,或者query命中词典中的二元运算符或者至少两个数字,或者 query命中词典中至少两种单位且包含疑问词。例如,对于“2的平方等于多少”的query,其命中了词典中的一元运算符“平方”, 又命中了数字“2”,可以识别出该query具有计算类需求。再例如,对于“三乘五公顷等于 多少平方米”的query,其命中了词典中的二元运算符“乘”,又命中了数字“三”和“五”,可 以识别出该query具有计算类需求。再例如“对于1公顷等于多少平方米”的query,其命 中了 “公顷”和“平方米”两个单位,且包含疑问词“多少”,可以识别出该query具有计算类 需求。步骤203 判断该query是纯数学计算类需求还是基于数学计算的换算类需求,如果是纯数学计算类需求,则执行步骤204 ;如果是基于数学计算的换算类需求,则执行步骤 206。在识别出query具有计算类需求后,在识别query是纯数学计算类需求还是基于 数学计算的换算类需求时,同样可以采用词典结合匹配规则的形式。例如,预先配置包含各 种单位的词典,配置匹配规则为query命中词典中至少两个单位,例如对于“三乘五公顷 等于多少平方米”的query,其命中词典中两个单位,即“公顷”和“平方米”,由于已经识别 出该query具有计算类需求,因此可以进一步识别出该query是基于数学计算的换算类需 求。步骤204 对该query进行自然语言处理,转换为标准算式。在本步骤之前可以首先判断该query是否为标准算式,如果是,则直接执行步骤 205 ;否则,执行步骤204。本步骤的具体实现可以参见实施例三。步骤205 将标准算式提供给专用计算模块进行计算,并从专用计算模块获得计 算结果,执行步骤210。专用计算模块执行的计算操作具体参见实施例四。步骤206 提取query中的纯数学计算部分,保留单位部分并确定单位换算公式。例如,用户输入的query为“三乘五公顷等于多少平方米”,提取query中的纯数学 计算部分“三乘五”,对“三乘五”执行步骤207。保留单位部分“公顷等于多少平方米”,在 本发明实施例中可以预先设置单位换算知识库,利用单位部分包含的两单位在单位换算知 识库中进行匹配,找到对应的换算公式,该例子中确定单位换算公式为“ X 10000平方米”。步骤207 对提取的纯数学计算部分进行自然语言处理,转换为标准算式。该步骤的具体实现与步骤204中的处理方式相同,同样参见实施例三。需要说明的是,对于某些query来说,其纯数学计算部分可能仅是数字,例如 如果用户输入的query为“三千二百韩元兑换多少人民币”,其纯数学计算部分仅是 “三千二百”,对应这种情况,在步骤207中转换为标准算式为“3200”。如果用户输入的 query为“北京时间和纽约时间差几个小时”,其纯数学计算部分默认为“1”,对应这种情 况,在步骤207中转换为标准算式仍为“1”。步骤208 将标准算式以及单位换算公式提供给专用计算模块进行计算,并从专 用计算模块获得计算结果,执行步骤210。在本实施例中专用计算模块可以首先对纯数学计算部分转换的标准算式进行计 算,获得计算结果后,将该计算结果与单位换算公式进行拼合后再进行计算,获得最终的计
晳社里 异苎口米。同样,专用计算模块执行的计算操作参见实施例四。将标准算式的计算结果和单位换算公式的计算结果进行拼装后,得到的结果为 150000平方米。步骤209 按照现有通用的自然语言处理逻辑,获取该query的关键词,利用关键 词查询搜索引擎的数据库,获取包含该query的关键词的页面结果,执行步骤210。步骤210 将该query对应的计算结果或页面结果中的一种或组合包含在搜索结 果中返回给用户。
在本发明实施例中,如果在步骤202中仅识别出query具有普通查询类需求,则返 回给用户的搜索结果中仅包含步骤209获取的页面结果。如果在步骤202中识别出query 具有计算类需求,则返回给用户的搜索结果中可以仅包含计算结果;或者,由于具有计算 类需求的query在具有计算类需求的同时也可能具有普通查询类需求,此时,也可以将该 query对应的计算结果和页面结果都包含在搜索结果中返回给用户。例如,当用户输入的query为“1. 12-1. M”,搜索引擎的服务器端可能识别出其具 有计算类需求,即需要计算两小数的差;同时也可能识别出其具有普通查询类需求,例如查 询1月12号至1月M号的相关信息,这种情况下,返回给用户的搜索结果中可能既包含两 小数的差的计算结果,也包含查询到的1月12号至1月M号的相关页面结果。当搜索结果中包含多种结果时,即既包含计算结果又包含页面结果时,可以根据 识别出该query的需求强度顺序对多种结果进行排序。仍以输入query “1. 12-1. 24”为 例,如果识别出该query具有计算类需求的强度高于普通查询类需求的强度,则可以将该 query对应的计算结果排在页面结果之前。当然,本发明并不限于这种排序策略,也可以采 用其他排序策略,例如固定将计算结果排在页面结果之前,或者,将计算结果排在搜索结 果中的固定排次,等等。至此,实施例二所示流程结束,下面结合实施例三将query转换为标准算式的过 程进行详细描述。实施例三、图3为本发明实施例三提供的将query转换为标准算式的方法流程图,如图3所 示,该方法可以包括以下步骤步骤301 对query进行过滤,过滤掉不具备实际运算意义的词语。在本实施例中,可以通过数据挖掘的方式或人工的方式预先将不具备实际运算意 义的词语记录在词典中,通过匹配该词典实现本步骤中的过滤。其中,不具备实际运算意义 的词语可以包括但不限于诸如“计算”等无实际运算意义的前缀,诸如“等于几”、“等于多 少”、“得多少”、“得几”、“结果是什么”等无实际运算意义的后缀,诸如逗号、句号、空格等无 实际运算意义的字符。举一个例子,假设用户输入的query为“3. 09减12分之37除以1. 15与12分之 1的和,所得的差的10%是多少”。在进行分词和过滤处理后,“是多少”作为无实际运算意义 的后缀被过滤掉,剩下“3. 09减12分之37除以1. 15与12分之1的和,所得的差的10%”。步骤302 根据预先设置的中文自然语言与数字之间的映射关系以及中文自然语 言与运算符之间的映射关系中的至少一种,将过滤处理后的query转换为数字和数学运算 符的组合。其中,数学运算符包括标准数学运算符和自定义数学运算符中的一种或组合。为了适应于用户采用中文形式输入数字,可以预先设置中文自然语言与数字之间 的映射关系,从而将query中的中文自然语言转换为数字。其映射关系可以如表1所示。表1
—二四五六七八九十十一十二十三12345678910111213
中文自然语言与数学运算符之间的映射关系可以包含但不限于以下几种情况1)能够被直接转换成标准数学运算符的词语与标准数学运算符的映射关系,如表 2所示。表权利要求
1.一种基于搜索引擎的计算器实现方法,其特征在于,该方法包括A、接收用户输入的搜索请求query;B、对所述query进行需求识别,如果识别出所述query具有计算类需求,执行步骤C;C、将所述query对应的标准算式提供给专用计算模块,并从所述专用计算模块获取计算结果;D、将获取的所述计算结果包含在所述query的搜索结果中。
2.根据权利要求1所述的方法,其特征在于,步骤B中对所述query进行需求识别具体 包括判断所述query与具有计算类需求的query模板是否匹配,如果匹配,则识别出所述 query具有计算类需求;否则,识别出所述query具有普通查询类需求;其中,所述具有计算 类需求的query模板是采用数据挖掘或人工的方式预先配置的。
3.根据权利要求1所述的方法,其特征在于,步骤B中对所述query进行需求识别具体 包括判断所述query与具有计算类需求的query模板是否匹配,如果匹配,则识别出所述 query具有计算类需求;默认所有query无论是否具有计算类需求,都具有普通查询类需求;其中,所述具有计算类需求的query模板是采用数据挖掘或人工的方式预先配置的。
4.根据权利要求1所述的方法,其特征在于,步骤C中,将所述query对应的标准算式 提供给专用计算模块具体包括Cl、将所述query作为转换对象进行自然语言处理,转换为标准算式;C2、将所述标准算式提供给所述专用计算模块。
5.根据权利要求1所述的方法,其特征在于,如果识别出所述query具有计算类需求, 在执行所述步骤C之前还包括判断所述query具备纯数学计算类需求还是具备基于数学计算的换算类需求,如果是 纯数学计算类需求,则执行所述步骤C ;如果是基于数学计算的换算类需求,则执行步骤F 至步骤I ;F、提取所述query中的纯数学计算部分,保留单位部分并确定单位换算公式;G、将所述纯数学计算部分作为转换对象进行自然语言处理,转换为标准算式;H、将标准算式以及单位换算公式提供给专用计算模块进行计算,并从专用计算模块获 得计算结果;I、将获得的计算结果包含在所述query的搜索结果中。
6.根据权利要求5所述的方法,其特征在于,所述从专用计算模块获得的计算结果为 所述专用计算模块对标准算式进行计算获得的计算结果与所述单位换算公式进行拼合后, 再进行计算所获得的计算结果。
7.根据权利要求4或5所述的方法,其特征在于,将转换对象进行自然语言处理,转换 为标准算式具体包括C11、对转换对象进行过滤,过滤掉不具备实际运算意义的词语;C12、根据预先设置的中文自然语言与数字之间的映射关系以及中文自然语言与数学 运算符之间的映射关系中的至少一种,将过滤处理后的转换对象转换为数字和数学运算符的组合;其中,所述数学运算符包括以下中的一种或组合标准数学运算符和自定义数学 运算符;C13、如果所述数学运算符中仅包括自定义数学运算符,则确认步骤C12处理后的转换 对象为标准算式;否则,按照各自定义数学运算符对应的解析策略,对经过所述步骤C12处 理后的转换对象中的各自定义数学运算符按照解析优先级逐一进行解析,从而将转换对象 解析为标准算式。
8.根据权利要求7所述的方法,其特征在于,所述不具备实际运算意义的词语是通过 数据挖掘或人工的方式预先记录在词典中的,包括以下词语计算、等于几、等于多少、得多少、得几、结果是什么; 还包括以下字符逗号、句号、空格。
9.根据权利要求7所述的方法,其特征在于,所述中文自然语言与数学运算符之间的 映射关系包括以下中的一种或组合能够直接转换成标准数学运算符的词语与标准数学运算符的映射关系;搭配使用之前运算结果的连词与自定义数学运算符的映射关系;表示连接两个数字一起运算的连词与自定义数学运算符的映射关系;搭配连词一起构成运算的词语与自定义数学运算符的映射关系;表示数字在前面的一元运算符的词语与自定义数学运算符的映射关系;表示二元运算符的词语与自定义数学运算符的映射关系;与运算符搭配使用的动词与自定义数学运算符的映射关系;表示冗余运算符的词语与自定义数学运算符的映射关系;表示数字在后面的一元运算符的词语与自定义数学运算符的映射关系;以及,需要转义的词语与自定义数学运算符的映射关系。
10.根据权利要求7所述的方法,其特征在于,各自定义数学运算符的解析优先级从高 到低顺序为解析优先级8 表示数字在后面的一元运算符的词语所映射的自定义数学运算符; 解析优先级7 搭配使用之前运算结果的连词所映射的自定义数学运算符; 解析优先级6 表示数字在前面的一元运算符的词语所映射的自定义数学运算符、除 了“除”之外表示二元运算符的词语所映射的自定义数学运算符、与运算符搭配使用的动词 所映射的自定义数学运算符;解析优先级5 表示连接两个数字一起运算的连词所映射的自定义数学运算符、搭配 连词一起构成运算的词语所映射的自定义数学运算符;解析优先级4 表示二元运算符的词语中,“除”所映射的自定义数学运算符; 解析优先级3 需要转义的词语所映射的自定义数学运算符; 解析优先级2 表示冗余运算符的词语所映射的自定义数学运算符。
11.根据权利要求9或10所述的方法,其特征在于,搭配连词一起构成运算的词语所映 射的自定义数学运算符由指示配合关系的运算符和标准运算符构成;表示数字在前面的一元运算符的词语所映射的自定义运算符由指示倒序关系的运算 符和标准运算符构成;表示数字在后面的一元运算符的词语所映射的自定义运算符由指示倒序关系的运算符和标准运算符构成;表示连接两个数字一起运算的连词所映射的自定义数学运算符为指示配合关系的运 算符。
12.根据权利要求1、4或5所述的方法,其特征在于,所述专用计算模块对标准算式的 计算方法具体包括J1、接收标准算式;J3、自左至右地读取标准算式,对当前读取到的符号执行步骤J4 ; J4、判断所述当前读取到的符号是数字还是运算符,如果是数字,执行步骤J5 ;如果是 运算符,执行步骤J6;J5、将所述当前读取到的符号压入操作数栈,转至步骤J12 ;J6、根据所述当前读取到的符号,或者,根据所述当前读取到的符号与运算符栈中当前 栈顶运算符的运算优先级状况,执行相应的处理,具体为若所述当前读取到的符号为左括 号,则执行步骤J8 ;若所述当前读取到的符号为右括号,则执行步骤J9 ;若所述当前读取到 的符号为结束符,则执行步骤JlO;若当前读取到的符号不是左括号、右括号和结束符,且 当前读取到的符号的运算优先级不高于运算符栈中当前栈顶运算符的运算优先级,则执行 步骤J7 ;若所述当前读取到的符号不是左括号、右括号和结束符,且当前读取到的符号的 运算优先级高于运算符栈中当前栈顶运算符的运算优先级,则执行步骤J8;J7、根据运算符栈中当前栈顶运算符的操作性质,从操作数栈中弹出相应个数的数字, 并从运算符栈中弹出当前栈顶运算符,利用弹出的运算符和数字进行运算,将计算结果压 入操作数栈,继续针对当前读取到的符号转至步骤J6 ;J8、将所述当前读取到的符号压入运算符栈,转至步骤J12 ;J9、循环执行以下操作根据运算符栈中当前栈顶运算符的操作性质,从操作数栈中弹 出相应个数的数字,并弹出运算符栈中的当前栈顶运算符,利用弹出的运算符和数字进行 运算,将计算结果压入操作数栈;直到从运算符栈中弹出左括号时,转至步骤J12 ;J10、循环执行以下操作根据运算符栈中当前栈顶运算符的操作性质,从操作数栈中 弹出相应个数的数字,并弹出运算符栈中的当前栈顶运算符,利用弹出的运算符和数字进 行运算,将计算结果压入操作数栈;直到运算符栈为空后,执行步骤Jll ;J11、最终操作数栈栈顶的数字为所述标准算式的计算结果,结束所述专用计算模块对 标准算式的计算流程;J12、判断标准算式是否读取完毕,如果否,继续读取标准算式的下一个符号,转至步骤 J4;否则,转至步骤J9。
13.根据权利要求12所述的方法,其特征在于,在所述步骤Jl和步骤J3之间还包括 J2、判断所述标准算式是否包含非标准数学算式的符号,如果是,结束所述专用计算模块对标准算式的计算流程;如果否,继续执行所述步骤J3。
14.根据权利要求11所述的方法,其特征在于,在所述步骤J4中,如果判断出所述当前 读取到的符号是数字,则该方法进一步包括将所述当前读取到的数字作为一个表达式压 入表达式栈;在所述步骤J7、J9和JlO中,如果从所述运算符栈中弹出运算符,则该方法进一步包括判断弹出的运算符是否为左括号,如果否,则从所述表达式栈中弹出相应个数的表达 式,利用所述弹出的运算符以及所述表达式栈弹出的表达式拼装成一个新的表达式后压入 所述表达式栈;如果所述弹出的运算符为左括号,则进一步判断是否从所述运算符栈弹出过上一个运 算符,弹出的上一个运算符是否也为左括号以及所述表达式栈当前栈顶的表达式开头是否 左括号,如果从所述运算符栈弹出过上一个运算符,弹出的上一个运算符不是左括号且所 述表达式栈当前栈顶的表达式开头不是左括号,则从所述表达式栈中弹出一个表达式,将 该表达式前后加上括号后作为一个新的表达式压入所述表达式栈;否则,保持所述表达式 栈不变;在步骤Jll中结束所述专用计算模块对标准算式的计算流程时,确定所述表达式栈中 的表达式为标准表达式;步骤D中所述搜索结果中包含所述计算结果和所述标准表达式的组合。
15.根据权利要求12所述的方法,其特征在于,在执行所述步骤J4之前,该方法还包 括判断所述当前读取到的符号是否属于读取的上一符号的合法后继类型,如果是,继续对 所述当前读取到的符号执行所述步骤J4;否则,确定标准算式不合法,结束所述专用计算 模块对标准算式的计算流程。
16.根据权利要求12所述的方法,其特征在于,在读取标准算式的第一个符号之前,该 方法还包括向所述运算符栈压入一个虚拟左括号;所述虚拟左括号的处理优先级与左括号相同,当从运算符栈弹出该虚拟左括号时,不 做任何处理;在所述步骤J12判断出标准算式读取完毕,且在转至步骤J9之前还包括设定当前读 取到的符号为右括号。
17.根据权利要求1所述的方法,其特征在于,所述步骤B中如果识别出所述query具 有普通查询类需求,则执行以下步骤E、将包含query中关键词的页面结果包含在所述query的搜索结果中。
18.根据权利要求17所述的方法,其特征在于,如果既识别出所述query具有计算类需 求又识别出所述query具有普通查询类需求,则该方法还包括将搜索结果中包含的计算结果和页面结果按照识别出所述query的需求强度顺序进 行排序。
19.一种基于搜索引擎的计算器实现装置,其特征在于,该装置包括请求接收单元、 需求识别单元、第一处理单元和第一结果产生单元;所述请求接收单元,用于接收用户输入的搜索请求query并提供给所述需求识别单元;所述需求识别单元,用于对所述query进行需求识别,如果识别出所述query具有计算 类需求,则将所述query提供给所述第一处理单元;所述第一处理单元,用于将所述需求识别单元提供的query所对应的标准算式提供给 专用计算模块;所述第一结果产生单元,用于从所述专用计算模块获取计算结果,将该计算结果包含 在所述query的搜索结果中。
20.根据权利要求19所述的装置,其特征在于,所述需求识别单元判断所述query与具 有计算类需求的query模板是否匹配,如果匹配,则识别出所述query具有计算类需求;否 则识别出所述query具有普通查询类需求;其中,所述具有计算类需求的query模板是采用数据挖掘或人工的方式预先配置的。
21.根据权利要求19所述的装置,其特征在于,所述需求识别单元判断所述query与具 有计算类需求的query模板是否匹配,如果匹配,则识别出所述query具有计算类需求;并 且,默认所有query无论是否具有计算类需求,都具有普通查询类需求;其中,所述具有计算类需求的query模板是采用数据挖掘或人工的方式预先配置的。
22.根据权利要求19所述的装置,其特征在于,所述第一处理单元具体将接收到的所 述query作为转换对象进行自然语言处理,转换为标准算式,将所述标准算式提供给所述 专用计算模块。
23.根据权利要求19所述的装置,其特征在于,该装置还包括第二处理单元和第二结 果产生单元;所述需求识别单元在识别出所述query具有计算类需求时,进一步判断所述query 具备纯数学计算类需求还是具备基于数学计算的换算类需求,如果是纯数学计算类需求, 则将所述query提供给所述第一处理单元;如果是基于数学计算的换算类需求,则将所述 query提供给所述第二处理单元;所述第二处理单元,用于提取所述query中的纯数学计算部分,保留单位部分并确定 单位换算公式,将所述纯数学计算部分发送给所述第一处理单元,将单位换算公式发送给 所述专用计算模块;所述第一处理单元,还用于将所述第二处理单元提供的所述纯数学计算部分作为转换 对象进行自然语言处理,转换为标准算式,并将该标准算式提供给所述专用计算模块;所述第二结果产生单元,用于从所述专用计算模块获得计算结果,将获得的计算结果 包含在所述query的搜索结果中。
24.根据权利要求23所述的装置,其特征在于,从所述专用计算模块获得的计算结果 为所述专用计算模块对标准算式进行计算获得的计算结果与所述单位换算公式进行拼合 后,再进行计算所获得的计算结果。
25.根据权利要求19所述的装置,其特征在于,所述第一处理单元具体包括过滤处理 子单元、符号转换子单元和符号解析子单元;所述过滤处理子单元,用于对转换对象进行过滤,过滤掉不具备实际运算意义的词语;所述符号转换子单元,用于根据预先设置的中文自然语言与数字之间的映射关系以及 中文自然语言与数学运算符之间的映射关系中的至少一种,将所述过滤处理子单元处理后 的转换对象转换为数字和数学运算符的组合;其中,所述数学运算符包括以下中的一种或 组合标准数学运算符和自定义数学运算符;所述符号解析子单元,用于如果所述数学运算符中仅包括自定义数学运算符,则确认 所述符号转换子单元处理后的转换对象为标准算式;否则,按照各自定义数学运算符对应 的解析策略,将所述符号转换子单元处理后的转换对象中的各自定义数学运算符按照解析 优先级逐一进行解析,从而将转换对象解析为标准算式。
26.根据权利要求25所述的装置,其特征在于,所述不具备实际运算意义的词语是通 过数据挖掘的方式或人工的方式预先记录在词典中的,包括以下词语计算、等于几、等于多少、得多少、得几、结果是什么; 还包括以下字符逗号、句号、空格。
27.根据权利要求25所述的装置,其特征在于,所述中文自然语言与数学运算符之间 的映射关系包括以下中的一种或组合能够直接转换成标准数学运算符的词语与标准数学运算符的映射关系;搭配使用之前运算结果的连词与自定义数学运算符的映射关系;表示连接两个数字一起运算的连词与自定义数学运算符的映射关系;搭配连词一起构成运算的词语与自定义数学运算符的映射关系;表示数字在前面的一元运算符的词语与自定义数学运算符的映射关系;表示二元运算符的词语与自定义数学运算符的映射关系;与运算符搭配使用的动词与自定义数学运算符的映射关系;表示冗余运算符的词语与自定义数学运算符的映射关系;表示数字在后面的一元运算符的词语与自定义数学运算符的映射关系;以及,需要转义的词语与自定义数学运算符的映射关系。
28.根据权利要求25所述的装置,其特征在于,各自定义数学运算符的解析优先级从 高到低顺序为解析优先级8 表示数字在后面的一元运算符的词语所映射的自定义数学运算符; 解析优先级7 搭配使用之前运算结果的连词所映射的自定义数学运算符; 解析优先级6 表示数字在前面的一元运算符的词语所映射的自定义数学运算符、除 了“除”之外表示二元运算符的词语所映射的自定义数学运算符、与运算符搭配使用的动词 所映射的自定义数学运算符;解析优先级5 表示连接两个数字一起运算的连词所映射的自定义数学运算符、搭配 连词一起构成运算的词语所映射的自定义数学运算符;解析优先级4 表示二元运算符的词语中,“除”所映射的自定义数学运算符; 解析优先级3 需要转义的词语所映射的自定义数学运算符; 解析优先级2 表示冗余运算符的词语所映射的自定义数学运算符。
29.根据权利要求27或28所述的装置,其特征在于,搭配连词一起构成运算的词语所 映射的自定义数学运算符由指示配合关系的运算符和标准运算符构成;表示数字在前面的一元运算符的词语所映射的自定义运算符由指示倒序关系的运算 符和标准运算符构成;表示数字在后面的一元运算符的词语所映射的自定义运算符由指示倒序关系的运算 符和标准运算符构成;表示连接两个数字一起运算的连词所映射的自定义数学运算符为指示配合关系的运 算符。
30.根据权利要求19、22或23所述的装置,其特征在于,所述专用计算模块具体包括 操作数栈、运算符栈、算式接收子模块、算式读取子模块、第一判断子模块、识别处理子模 块、计算处理子模块、第二判断子模块和结果获取子模块;所述算式接收子模块,用于接收标准算式;所述算式读取子模块,用于自左至右地读取标准算式,将当前读取到的符号发送给所 述第一判断子模块;所述第一判断子模块,用于判断所述当前读取到的符号是数字还是运算符,如果是数 字,向计算处理子模块发送第一执行通知;如果是运算符,将所述当前读取到的符号发送给 识别处理子模块;所述识别处理子模块,用于对所述当前读取到的符号,或者,对所述当前读取到的符号 与运算符栈中当前栈顶运算符的运算优先级状况进行识别,若所述当前读取到的符号为左 括号,则向所述计算处理子模块发送第三执行通知;若所述当前读取到的符号为右括号,则 向所述计算处理子模块发送第四执行通知;若所述当前读取到的符号为结束符,则向所述 计算处理子模块发送第五执行通知;若所述当前读取到的符号不是左括号、右括号和结束 符,且当前读取到的符号的运算优先级不高于运算符栈中当前栈顶运算符的运算优先级, 则向所述计算处理子模块发送第二执行通知;若所述当前读取到的符号不是左括号、右括 号和结束符,且当前读取到的符号的运算优先级高于运算符栈中当前栈顶运算符的运算优 先级,则向所述计算处理子模块发送第三执行通知;所述计算处理子模块,用于接收到所述第一执行通知后,将所述当前读取到的符号压 入操作数栈,并向所述第二判断子模块发送判断通知;接收到所述第二执行通知后,根据运 算符栈中当前栈顶运算符的操作性质,从操作数栈中弹出相应个数的数字,并从运算符栈 中弹出当前栈顶运算符,利用弹出的运算符和数字进行运算,将计算结果压入操作数栈,触 发所述识别处理子模块继续执行所述识别的操作;接收到所述第三执行通知后,将所述当 前读取到的符号压入运算符栈,并向所述第二判断子模块发送判断通知;接收到所述第四 执行通知后,循环执行操作S,直到从运算符栈中弹出左括号时,向所述第二判断子模块发 送判断通知;接收到所述第五执行通知后,循环执行操作S,直到运算符栈为空后,向所述 结果获取子模块发送获取通知;所述第二判断子模块,用于接收到判断通知后,判断标准算式是否读取完毕,如果否, 触发所述算式读取子模块继续读取所述标准算式中的下一个符号;否则,向所述计算处理 子模块发送第四执行通知;所述结果获取子模块,用于接收到所述获取通知后,获取操作数栈栈顶的数字作为所 述标准算式的计算结果;所述操作S为根据运算符栈中当前栈顶运算符的操作性质,从操作数栈中弹出相应 个数的数字,并弹出运算符栈中的当前栈顶运算符,利用弹出的运算符和数字进行运算,将 计算结果压入操作数栈。
31.根据权利要求30所述的装置,其特征在于,所述专用计算模块还包括第一合法判 断子模块,用于判断所述算式接收子模块接收到的标准算式是否包含非标准数学算式的符 号,如果是,禁止所述算式读取子模块读取所述标准算式;如果否,允许所述算式读取子模 块读取该标准算式。
32.根据权利要求30所述的装置,其特征在于,所述专用计算模块还包括表达式栈、 表达式处理子模块以及结果组合子模块;所述表达式处理子模块,用于在所述第一判断子模块判断出所述当前读取到的符号是数字时,将所述当前读取到的数字作为一个表达式压入所述表达式栈;在所述计算处理子 模块从所述运算符栈中弹出运算符时,判断弹出的运算符是否为左括号,如果否,则从所述 表达式栈中弹出相应个数的表达式,利用所述弹出的运算符以及所述表达式栈弹出的表达 式拼装成一个新的表达式后压入所述表达式栈;如果判断出所述弹出的运算符为左括号, 则进一步判断是否从所述运算符栈弹出过上一个运算符,弹出的上一个运算符是否也为左 括号以及所述表达式栈当前栈顶的表达式开头是否为左括号,如果从所述运算符栈弹出过 上一个运算符,弹出的上一个运算符不是左括号且所述表达式栈当前栈顶的表达式开头不 是左括号,则从所述表达式栈中弹出一个表达式,将该表达式前后加上括号后作为一个新 的表达式压入所述表达式栈;否则,保持所述表达式栈不变;所述计算处理子模块,还用于在所述运算符栈为空时,向所述结果组合子模块发送组 合通知;所述结果组合子模块,用于接收到所述组合通知后,确定所述表达式栈中的表达式为 标准表达式,并将所述标准表达式和所述结果获取子模块获取的计算结果进行组合后包含 在所述query的搜索结果中。
33.根据权利要求30所述的装置,其特征在于,所述专用计算模块还包括第二合法判断子模块,用于判断所述算式读取子模块当前读取到的符号是否属于读取 的上一符号的合法后继类型,如果是,允许所述第一判断子模块执行判断所述当前读取到 的符号是数字还是运算符的操作;否则,确定标准算式不合法,禁止所述第一判断子模块执 行判断所述当前读取到的符号是数字还是运算符的操作。
34.根据权利要求30所述的装置,其特征在于,所述计算处理子模块,还用于在所述算 式读取子模块读取标准算式的第一个符号之前,向所述运算符栈压入一个虚拟左括号;当 从所述运算符栈弹出所述虚拟左括号时,不做任何处理;所述虚拟左括号的处理优先级与 左括号相同;所述第二判断子模块在判断出标准算式读取完毕时,还用于设定当前读取到的符号为 右括号。
35.根据权利要求19所述的装置,其特征在于,该装置还包括普通搜索单元;所述需求识别单元如果识别出所述query具有普通查询类需求,则将所述query提供给所述普通搜索单元;所述普通搜索单元,用于将包含所述query中关键词的页面结果包含在所述query的 搜索结果中。
36.根据权利要求35所述的装置,其特征在于,该装置还包括排序处理单元;如果所述需求识别单元既识别出所述query具有计算类需求又识别出所述query具有 普通查询类需求,则将识别出所述query的需求强度提供给所述排序处理单元;所述排序处理单元,用于将搜索结果中包含的计算结果和页面结果按照识别出所述 query的需求强度顺序进行排序。
全文摘要
本发明提供了一种基于搜索引擎的计算器实现方法和装置,其中方法包括接收用户输入的搜索请求(query);对所述query进行需求识别,如果识别出所述query具有计算类需求,则将所述query对应的标准算式提供给专用计算模块,并从所述专用计算模块获取计算结果;将获取的计算结果包含在query的搜索结果中。通过本发明能够通过搜索引擎实现算式的计算功能。
文档编号G06F17/30GK102096716SQ201110036219
公开日2011年6月15日 申请日期2011年2月11日 优先权日2011年2月11日
发明者张磊, 来鑫, 马远珍 申请人:百度在线网络技术(北京)有限公司