CN102096716A - 一种基于搜索引擎的计算器实现方法和装置 - Google Patents
一种基于搜索引擎的计算器实现方法和装置 Download PDFInfo
- Publication number
- CN102096716A CN102096716A CN 201110036219 CN201110036219A CN102096716A CN 102096716 A CN102096716 A CN 102096716A CN 201110036219 CN201110036219 CN 201110036219 CN 201110036219 A CN201110036219 A CN 201110036219A CN 102096716 A CN102096716 A CN 102096716A
- Authority
- CN
- China
- Prior art keywords
- operator
- stack
- symbol
- formula
- query
- 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
Links
Images
Landscapes
- Machine Translation (AREA)
Abstract
本发明提供了一种基于搜索引擎的计算器实现方法和装置,其中方法包括:接收用户输入的搜索请求(query);对所述query进行需求识别,如果识别出所述query具有计算类需求,则将所述query对应的标准算式提供给专用计算模块,并从所述专用计算模块获取计算结果;将获取的计算结果包含在query的搜索结果中。通过本发明能够通过搜索引擎实现算式的计算功能。
Description
【技术领域】
本发明涉及互联网技术领域,特别涉及一种基于搜索引擎的计算器实现方法和装置。
【背景技术】
随着互联网技术的不断发展以及信息的不断膨胀,人们对于网络信息的使用需求越来越高。用户使用互联网获取信息时,会存在计算需求,例如用户想获取某一个算式的计算结果。在现有技术中,当用户存在计算需求时,需要登录特定的网站,由该特定的网站提供类似于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对应的标准算式提供给专用计算模块具体包括:
C1、将所述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;若所述当前读取到的符号为结束符,则执行步骤J10;若当前读取到的符号不是左括号、右括号和结束符,且当前读取到的符号的运算优先级不高于运算符栈中当前栈顶运算符的运算优先级,则执行步骤J7;若所述当前读取到的符号不是左括号、右括号和结束符,且当前读取到的符号的运算优先级高于运算符栈中当前栈顶运算符的运算优先级,则执行步骤J8;
J7、根据运算符栈中当前栈顶运算符的操作性质,从操作数栈中弹出相应个数的数字,并从运算符栈中弹出当前栈顶运算符,利用弹出的运算符和数字进行运算,将计算结果压入操作数栈,继续针对当前读取到的符号转至步骤J6;
J8、将所述当前读取到的符号压入运算符栈,转至步骤J12;
J9、循环执行以下操作:根据运算符栈中当前栈顶运算符的操作性质,从操作数栈中弹出相应个数的数字,并弹出运算符栈中的当前栈顶运算符,利用弹出的运算符和数字进行运算,将计算结果压入操作数栈;直到从运算符栈中弹出左括号时,转至步骤J12;
J10、循环执行以下操作:根据运算符栈中当前栈顶运算符的操作性质,从操作数栈中弹出相应个数的数字,并弹出运算符栈中的当前栈顶运算符,利用弹出的运算符和数字进行运算,将计算结果压入操作数栈;直到运算符栈为空后,执行步骤J11;
J11、最终操作数栈栈顶的数字为所述标准算式的计算结果,结束所述专用计算模块对标准算式的计算流程;
J12、判断标准算式是否读取完毕,如果否,继续读取标准算式的下一个符号,转至步骤J4;否则,转至步骤J9。
更进一步地,在所述步骤J1和步骤J3之间还包括:
J2、判断所述标准算式是否包含非标准数学算式的符号,如果是,结束所述专用计算模块对标准算式的计算流程;如果否,继续执行所述步骤J3。
更优地,在所述步骤J4中,如果判断出所述当前读取到的符号是数字,则该方法进一步包括:将所述当前读取到的数字作为一个表达式压入表达式栈;
在所述步骤J7、J9和J10中,如果从所述运算符栈中弹出运算符,则该方法进一步包括:
判断弹出的运算符是否为左括号,如果否,则从所述表达式栈中弹出相应个数的表达式,利用所述弹出的运算符以及所述表达式栈弹出的表达式拼装成一个新的表达式后压入所述表达式栈;
如果所述弹出的运算符为左括号,则进一步判断是否从所述运算符栈弹出过上一个运算符,弹出的上一个运算符是否也为左括号以及所述表达式栈当前栈顶的表达式开头是否左括号,如果从所述运算符栈弹出过上一个运算符,弹出的上一个运算符不是左括号且所述表达式栈当前栈顶的表达式开头不是左括号,则从所述表达式栈中弹出一个表达式,将该表达式前后加上括号后作为一个新的表达式压入所述表达式栈;否则,保持所述表达式栈不变;
在步骤J11中结束所述专用计算模块对标准算式的计算流程时,确定所述表达式栈中的表达式为标准表达式;
步骤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。保留单位部分“公顷等于多少平方米”,在本发明实施例中可以预先设置单位换算知识库,利用单位部分包含的两单位在单位换算知识库中进行匹配,找到对应的换算公式,该例子中确定单位换算公式为“×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.24”,搜索引擎的服务器端可能识别出其具有计算类需求,即需要计算两小数的差;同时也可能识别出其具有普通查询类需求,例如查询1月12号至1月24号的相关信息,这种情况下,返回给用户的搜索结果中可能既包含两小数的差的计算结果,也包含查询到的1月12号至1月24号的相关页面结果。
当搜索结果中包含多种结果时,即既包含计算结果又包含页面结果时,可以根据识别出该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
一 | 二 | 三 | 四 | 五 | 六 | 七 | 八 | 九 | 十 | 十一 | 十二 | 十三 | ... |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | ... |
中文自然语言与数学运算符之间的映射关系可以包含但不限于以下几种情况:
1)能够被直接转换成标准数学运算符的词语与标准数学运算符的映射关系,如表2所示。
表2
2)搭配使用之前运算结果的连词与自定义数学运算符的映射关系,如表3所示,这种连词需要与前面的运算结果搭配使用,对于这种情况使用自定义的数学运算符。表3中,备注部分的解析是在步骤303中使用的解析规则,以下表格中备注的含义均是如此。
表3
3)表示连接两个数字一起运算的连词与自定义数学运算符的映射关系,这种连词表示前后两个数字需要一起进行运算,具体的运算类型需要搭配后缀。这种情况下,自定义数学运算符可以为指示配合关系的运算符。这种映射关系如表4所示。
表4
4)搭配连词一起构成运算的词语与自定义数学运算符的映射关系,如表5所示。这类词语需要配合某些连词一起才能表示运算,配合的连词可以是表4中的连词,例如:3与3的和;或者配合的连词是表2中的某些词语,例如:3乘3的积。这种情况下映射的自定义数学运算符通常是由指示配合关系的运算符和标准运算符结合而成,在本发明实施例中采用“&”作为指示配合关系的运算符。
表5
5)表示数字在前面的一元运算符的词语与自定义数学运算符的映射关系,如表6所示。这类一元运算符通常中文表达是放在数字后面的,例如2pi的余弦值。这种情况下映射的自定义数学运算符通常是由指示倒序关系的运算符和标准运算符结合而成,在本发明实施例中采用“@”作为指示倒序关系的运算符。
表6
6)表示二元运算符的词语与自定义数学运算符的映射关系。
二元运算符可以分为两种,第一种如表7所示,通常中文表达时,两个操作数都在该二元运算符的左边,例如2的3次方。
第二种如表8所示,通常中文表达时,调换两个操作数的前后顺序,例如3除5。
表7
表8
7)需要与运算符搭配使用的动词与自定义数学运算符的映射关系,如表9所示。
表9
8)表示冗余运算符的词语与自定义数学运算符的映射关系,如表10所示。
表10
9)表示数字在后面的一元运算符的词语与自定义数学运算符的映射关系,如表11所示,这种情况下映射的自定义数学运算符通常是由指示倒序关系的运算符和标准运算符结合而成,在本发明实施例中采用“@”作为指示倒序关系的运算符。
表11
10)需要转义的词语与自定义数学运算符的映射关系,如表12所示。
表12
在本步骤中,按照上述映射关系,将“3.09减12分之37除以1.15与12分之1的和,所得的差的10%”转换为:
“3.09-12@\37/1.15&12@\1&+##@&-#^%$10%” 算式(1)
步骤303:按照各自定义数学运算符对应的解析策略,对经过步骤302处理后的query中的各自定义运算符按照解析优先级逐一进行解析,从而将query解析为标准算式。
在对“3.09-12@\37/1.15&12@\1&+##@&-#^%$10%”进行解析时,可以首先检查是否有常量,如果有,将该常量及其前面紧邻的纯数字用括号括起来,例如如果经过步骤302处理后的query中包含常量pi,可以将与前面紧邻的纯数字用括号括起来,例如“(2Pi)”。
需要说明的是,本发明所涉及的数字包括:纯数字和常量,以下实施例均是如此。
将算式(1)中各自定义运算符按照解析优先级从高到低逐一进行解析:
首先,算式(1)中解析优先级最高的是“##@”,解析优先级为7,按照表3中“##@”对应的解析策略进行解析,具体为:确定“##@”之后在表5中对应的运算符“&-”,该“&-”所表征的标准数学运算符为“-”,从query的起始开始找“-”,在“-”左边的数字之前加“(”,在“-”右边加“(”,再用“))”替换“##@”后,删掉“&-”,算式(1)转换为:
“(3.09-(12@\37/1.15&12@\1&+))#^%$10%” 算式(2)
接着,按照解析优先级从高到低的顺序,解析优先级为6的运算符,即查找是否含有表6、表7和表8中解析优先级为6的运算符,在算式(2)中查找到“@\”,按照表8中“@\”对应的解析策略进行解析,即调换“@\”前后的数字,将“@\”化为除号,然后在前后数字两边加上括号,算式(2)转换为:
“(3.09-((37/12)/1.15&(1/12)&+))#^%$10%” 算式(3)
然后,解析优先级为5的运算符,在算式(3)中查找解析优先级为5的运算符,找到“&”和“&+”,按照表4和表5中“&”和“&+”对应的解析策略进行解析后,算式(3)转换为:
“(3.09-((37/12)/((1.15)+((1/12))))#^%$10%” 算式(4)
接着查找解析优先级为4的运算符,在算式(4)中不存在,继续查找解析优先级为3的运算符,找到“#^%$”,按照表12中“#^%$”对应的解析策略进行解析,将“#^%$”替换为乘号后,算式(4)转换为:
“(3.09-((37/12)/((1.15)+((1/12))))*10%” 算式(5)
继续查找解析优先级为2的运算符,即查找“$”,在算式(5)中不存在,结束解析流程,得到的算式(5)为标准算式。
至此,实施例三所示流程结束,下面结合实施例四对专业计算模块标准算式的计算过程进行详细描述。
实施例四、
图4为本发明实施例四提供的专业计算模块的计算方法流程图,如图4所示,该方法可以包括以下步骤:
步骤401:接收转换得到的标准算式。
步骤402:判断该标准算式是否为合法的标准数学算式,如果否,进行出错处理,结束当前计算流程;如果是,执行步骤403。
本步骤中,可以判断转换后得到的标准算式是否包含非标准数学算式的符号,如果包含,则确定转换后得到的标准算式不是合法的标准数学算式;否则,确定转换后的标准算式为合法的标准数学算式。
其中,非标准数学算式的符号可以预先设置,例如设置标准数组或者运算符号之外的字符、数字中间的空格等为非标准算式的字符串。
步骤403:自左至右地读取标准算式,对当前读取到的符号执行步骤404。
步骤404:判断当前读取到的符号是数字还是运算符,如果是数字,执行步骤405;如果是运算符,执行步骤406。
首先建立两个栈,操作数栈(NumStack)和运算符栈(OpStack)。其中,操作数栈用来存储标准算式中的各数字;运算符栈用来存储标准算式中的运算符。
步骤405:将当前符号压入操作数栈,转至步骤412。
步骤406:如果当前读取到的符号为运算符,则根据当前读取到的符号与运算符栈中当前栈顶运算符的运算优先级状况,执行相应的处理,具体为:若当前读取到的符号不是左括号、右括号或结束符中的任一种,且当前读取到的符号的运算优先级不高于运算符栈中当前栈顶运算符的运算优先级,则执行步骤407;若当前读取到的符号为左括号,或者,当前读取到的符号不是左括号、右括号或结束符中的任一种且当前读取到的符号的运算优先级高于运算符栈中当前栈顶运算符的运算优先级,则执行步骤408;若当前读取到的符号为右括号,则执行步骤409;若当前读取到的符号为结束符(通常会在标准算式的最后设置结束符,该结束符可以为标准算式中的“=”,也可以是其他形式的结束符),则执行步骤410。
步骤407:根据运算符栈中当前栈顶运算符的操作性质,从操作数栈中弹出相应个数的数字,并弹出当前栈顶运算符,利用弹出的运算符和数字进行运算,将计算结果压入操作数栈,继续针对当前读取到的符号转至执行步骤406。
其中,如果当前栈顶运算符的操作性质为一元操作,则从操作数栈中弹出一个数字;如果运算符栈中当前栈顶运算符的操作性质为二元操作,则从操作数栈中弹出两个数字。例如,从运算符栈中弹出的运算符为sin,从操作数栈中弹出数字pi,则将sin pi进行运算后,将运算结果再压入操作数栈。再例如,从运算符栈中弹出的运算符为+,从操作数栈中弹出两个数字2和3,则将2+3进行运算后,将运算结果再压入操作数栈。
步骤408:将当前读取到的符号压入运算符栈,转至步骤412。
步骤409:循环执行以下操作:根据运算符栈中当前栈顶运算符的操作性质,从操作数栈中弹出相应个数的数字,并弹出运算符栈中的当前栈顶运算符,利用弹出的运算符和数字进行运算,将计算结果压入操作数栈。直到从运算符栈中弹出左括号时,转至步骤412。
步骤410:循环执行以下操作,根据运算符栈中当前栈顶运算符的操作性质,从操作数栈中弹出相应个数的数字,并弹出运算符栈中的当前栈顶运算符,利用弹出的运算符和数字进行运算,将计算结果压入操作数栈。直到运算符栈为空后,执行步骤411。
步骤411:最终操作数栈栈顶的数字即为标准算式的计算结果,结束专用计算模块的计算流程。
步骤412:判断标准算式是否读取完毕,如果否,读取标准算式的下一个符号,转至步骤404;如果是,设定当前读取到的符号为右括号,转至步骤409。
在上述过程中涉及到各运算符的运算优先级,各运算符的运算优先级比较可以如表13所示,表中第一行中的符号为从标准算式读取的当前符号,第一列中的符号为运算符栈的栈顶运算符。表格中的“1”、“-1”、“-9”和“0”表示运算符栈的栈顶运算符与读取的当前符号的运算符的运算优先级关系,“1”表示运算符栈的栈顶运算符的运算优先级大于读取的当前符号的运算优先级;“-1”表示运算符栈的栈顶运算符的运算优先级小于读取的当前符号的运算优先级;“-9”表示标准算式出错;“0”表示运算符栈的栈顶运算符的运算优先级等于读取的当前符号的运算优先级。
例如,当运算符栈的栈顶运算符为“+”,读取的当前符号也为“+”,则查询该表得到“1”,说明运算符栈的栈顶运算符的运算优先级大于读取的当前符号的运算优先级;当运算符栈的栈顶运算符为“+”,读取的当前符号为“×”,则查询该表得到“-1”,说明运算符栈的栈顶运算符的运算优先级小于读取的当前符号的运算优先级;当运算符栈的栈顶运算符为“)”,读取的当前符号为“+”,则查询该表得到“-9”,说明标准算式出错。
表13
+ | - | × | / | << | >> | M | R | ^ | ! | % | S | C | T | CT | AS | AC | AT | ACT | P | ( | ) | |
+ | 1 | 1 | -1 | -1 | 1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 1 |
- | 1 | 1 | -1 | -1 | 1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 1 |
× | 1 | 1 | 1 | 1 | 1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 1 |
/ | 1 | 1 | 1 | 1 | 1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 1 |
<< | 1 | 1 | -1 | -1 | 1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 1 |
M | 1 | 1 | 1 | 1 | 1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 1 |
R | 1 | 1 | 1 | 1 | 1 | 1 | -1 | -1 | 1 | 1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 1 |
^ | 1 | 1 | 1 | 1 | 1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 1 |
! | 1 | 1 | 1 | 1 | 1 | 1 | -9 | -9 | 1 | 1 | 1 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | 1 |
% | 1 | 1 | 1 | 1 | 1 | 1 | -9 | -9 | 1 | 1 | 1 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | 1 |
S | 1 | 1 | 1 | 1 | 1 | 1 | -1 | -1 | 1 | 1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 1 |
C | 1 | 1 | 1 | 1 | 1 | 1 | -1 | -1 | 1 | 1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 1 |
T | 1 | 1 | 1 | 1 | 1 | 1 | -1 | -1 | 1 | 1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 1 |
CT | 1 | 1 | 1 | 1 | 1 | 1 | -1 | -1 | 1 | 1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 1 |
AS | 1 | 1 | 1 | 1 | 1 | 1 | -1 | -1 | 1 | 1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 1 |
AC | 1 | 1 | 1 | 1 | 1 | 1 | -1 | -1 | 1 | 1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 1 |
AT | 1 | 1 | 1 | 1 | 1 | 1 | -1 | -1 | 1 | 1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 1 |
ACT | 1 | 1 | 1 | 1 | 1 | 1 | -1 | -1 | 1 | 1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 1 |
P | 1 | 1 | 1 | 1 | 1 | 1 | -1 | -1 | 1 | 1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 1 |
( | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 0 |
) | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 |
表13中,M代表取模的运算符“Mod”,R代表取余的运算符“Rem”,S代表正弦的运算符“Sin”,C代表余弦的运算符“Cos”,T代表正切的运算符“Tan”,CT代表余切的运算符“Cot”,AS代表反正弦的运算符“Arcsin”,AC代表反余弦的运算符“Arccos”,AT代表反正切的运算符“Arctan”,ACT代表反余切的运算符“Arccot”,P代表转换角度到弧度的运算符。
更优地,在本发明实施例中,可以进一步预先设置表达式栈,如果当前读取到的符号为数字,则将当前读取到的数字作为一个表达式压入表达式栈。如果从运算符栈弹出运算符,则判断该弹出的运算符是否为左括号,如果否,则从表达式栈中弹出相应个数的表达式,利用运算符栈弹出的运算符、表达式栈弹出的表达式拼装成一个新的表达式后压入表达式栈。
如果从运算符栈弹出的运算符为左括号,则进一步判断是否从运算符栈弹出过上一个运算符、弹出的上一个运算符是否也为左括号以及表达式栈当前栈顶的表达式开头是否为左括号,如果从运算符栈弹出过上一个运算符,弹出的上一个运算符不是左括号且表达式栈当前栈顶的表达式开头不是左括号,则从表达式栈中弹出一个表达式,将该表达式前后加上括号后作为一个新的表达式压入表达式栈;否则,保持表达式栈不变。
通过上述表达式栈的设置,在专用计算模块完成标准算式的计算后,表达式栈中的表达式就是标准算式的标准表达式,在向用户返回计算结果时,可以将标准表达式与计算结果进行组合后一同返回给用户,也就是说,返回给用户的搜索结果中包含标准表达式和计算结果的组合。
更优地,在开始读取标准算式的第一个符号之前,可以首先向运算符栈压入一个虚拟左括号,该虚拟左括号的处理优先级与左括号相同,但从运算符栈弹出虚拟左括号时,不做任何处理。
在本发明实施例中,步骤412中在标准算式读取完毕时,设定当前读取到的符号为右括号(即试图向运算符栈压入右括号),以及在读取标准算式的第一个符号之前想运算符栈压入虚拟左括号,作用都是为了确保运算符栈中的所有运算符都能够弹出被处理,从而标准算式能够完全处理。
举一个具体的实例,假设专用计算模块对((1.15)+(1/12)×sin pi这个query进行计算,过程如下:
首先,虚拟左括号进运算符栈,然后读取标准算式的下一个符号“(”,将“(”压入运算符栈。
再读取标准算式的下一个符号“(”,和运算符栈当前栈顶的“(”比较后,读取的“(”处理优先级较高,读取的“(”被压入运算符栈。
读取标准算式的下一个符号“1.15”,读取的“1.15”被压入操作数栈,且“1.15”作为一个表达式被压入表达式栈。
读取标准算式的下一个符号“)”,从运算符栈栈顶弹出“(”,因为之前还没弹出过任何运算符,“(1.15)”的计算结果仍为1.15,操作数栈中仍为“1.15”,表达式栈中也仍为“1.15”。
继续读取标准算式的下一个符号“+”,与运算符栈当前栈顶的“(”进行比较,读取的“+”处理优先级较高,“+”被加入运算符栈“(”,目前运算符栈栈顶为“+”,下面依次是“(”和虚拟左括号。
读取标准算式的下一个符号“(”,与运算符栈当前栈顶的“+”进行比较,读取的“(”处理优先级较高,读取的“(”被压入运算符栈。
继续读取标准算式的下一个符号“1”,“1”被压入操作数栈,且“1”作为一个表达式被压入表达式栈。
继续读取标准算式的下一个符号“/”,与运算符栈当前栈顶的“(”进行比较,读取的“/”处理优先级较高,读取的“/”被压入运算符栈。
读取标准算式的下一个符号“12”,将“12”压入操作数栈,且“12”作为一个表达式被压入表达式栈。
读取标准算式的下一个符号“)”,与运算符栈当前栈顶的“/”进行比较,当前栈顶的“/”的处理优先级较高,从运算符栈的栈顶弹出“/”,“/”是二元运算符,从操作数栈弹出两个数字,用第二个弹出来的数字除以第一个弹出来的数字,即“1/12”,将结果压入操作数栈。同时,从表达式栈弹出两个表达式,将第二个弹出来的表达式与“/”以及第一个弹出来的表达式拼成新的表达式压回表达式栈,也就是将“1/12”压入表达式栈,现在表达式栈中有两个表达式,栈顶是“1/12”,下面是“1.15”。
继续从运算符栈的栈顶弹出“(”,检查上一个从运算符栈弹出的运算符是否为“(”,由于上一个从运算符栈弹出的运算符为“/”,所以将表达式栈顶表达式弹出,在弹出的表达式前后加上括号后作为一个新的表达式再压回表达式栈,当前表达式栈中存在两个表达式,栈顶是“(1/12)”,下面是“1.15”。
继续读取标准算式的下一个符号“)”,与当前运算符栈栈顶的“+”进行比较,运算符栈栈顶的“+”处理优先级比较高,从运算符栈弹出“+”,由于“+”是二元运算符,从操作数栈弹出两个数字,用第二个弹出来的数字加上第一个弹出来的数字,即1.15加上1/12的结果,将和压入操作数栈。
同时,从表达式栈弹出两个表达式,将第二个弹出来的表达式与“+”以及第一个弹出来的表达式拼成新的表达式压回表达式栈,也就是将“1.15+(1/12)”压入表达式栈,当前表达式栈中只有一个表达式“1.15+(1/12)”。
继续从运算符栈的栈顶弹出“(”,检查上一个从运算符栈弹出的运算符是否为“(”,由于上一个从运算符栈弹出的运算符是“+”,所以将表达式栈顶的表达式弹出,前后加上括号后再作为一个新的表达式压回表达式栈,现在表达式栈中只有1个表达式,即“(1.15+(1/12))”。
继续读取标准算式的下一个符号“×”,与当前运算符栈栈顶的虚拟左括号进行比较,读取的“×”处理优先级较高,将读取的“×”压入运算符栈。
读取标准算式的下一个符号“sin”,与当前运算符栈栈顶的“×”进行比较,读取的“sin”处理优先级较高,将读取的“sin”压入运算符栈。
继续读取标准算式的下一个符号“pi”,将“pi”压入操作数栈,且将“pi”作为表达式压入表达式栈。
此时标准算式读取完毕,但运算符栈非空,这时设定当前读取的运算符为“)”,从运算符栈栈顶弹出“sin”,由于“sin”为一元运算符,从操作数栈弹出1个数字,即“1.15+(1/12)”的计算结果,将该数值的sin值,压回操作数栈。同时,从表达式栈弹出1个表达式,检查上一个从运算符栈弹出的运算符是否不是“(”且从表达式栈弹出的表达式不是以“(”开头,只要有一个条件成立,则将从表达式栈弹出的表达式前后加上括号,然后之前在加上“sin”后压回表达式栈;如果两个条件都不成立,就将“sin”加上表达式栈弹出的表达式压回表达式栈。目前表达式栈中有两个表达式,栈顶是“sin(pi)”,下面是”(1.15+(1/12))”。
继续从运算符栈弹出栈顶的“×”,从操作数栈弹出两个数字,用第二个弹出来的数字乘以第一个弹出来的数字,即(1.15+(1/12))的结果乘以sin(pi)的结果,将积压入操作数栈。同时从表达式栈弹出两个表达式,将第二个弹出来的表达式以及“×”以及第一个弹出的表达式拼成一个新的表达式压回表达式栈,也就是将“(1.15+(1/12))×sin(pi)”压入表达式栈,当前表达式栈中只有一个表达式,即“(1.15+(1/12))*sin(pi)”。
继续从运算符栈中弹出虚拟左括号,不做任何处理,由于当前运算符栈为空,此时的表达式栈只有一个表达式,就是最终与计算结果组合后在搜索结果中显示给用户的标准表达式。此时的操作数栈也只有一个数字,即标准算式最终的计算结果,该标准算式计算结束。
更进一步地,可以预先针对各类型的符号定义合法后继类型,在从标准算式读取符号时,在执行步骤404之前可以判断当前读取到的符号是否属于上一符号的合法后继类型,如果是,继续对当前读取到的符号执行步骤404;否则,确定标准算式不合法,可以进行报错处理。
其中,符号的类型可以包括但不限于:纯数字、函数、一元运算符、二元运算符、常量、左括号、右括号、特殊单位符度数符号(即“°”)、后缀运算符。特殊单位符可以为数字(包括纯数字和常量)后面的度数符号其中,后缀运算符可以包括:百分号和阶乘运算“°”。
具体地,可以定义纯数字的合法后继类型包括:常量、一元运算符、二元运算符、右括号、特殊单位符、后缀运算符等。
可以定义函数的合法后继类型包括:左括号、纯数字、常量、函数等。
可以定义一元运算符的合法后继类型包括:纯数字、常量、左括号、右括号等。
可以定义二元运算符的合法后继类型包括:纯数字、常量、左括号、函数等。
可以定义左括号的合法后继类型包括:左括号、纯数字、常量、一元运算符、函数等。
可以定义右括号的合法后继类型包括:一元运算符、二元运算符、常量、特殊单位符等。
可以定义度数符号的合法后继类型包括:一元运算符、二元运算符、常量等。
以上是对本发明所提供方法进行的描述,下面通过实施例五对本发明所提供的装置进行详细描述。
实施例五、
本发明提供的装置设置在搜索引擎的服务器端,如图5所示,该装置可以包括:请求接收单元500、需求识别单元510、第一处理单元520和第一结果产生单元530。
请求接收单元500,用于接收用户输入的query并提供给需求识别单元510。
需求识别单元510,用于对query进行需求识别,如果识别出query具有计算类需求,则将query提供给第一处理单元520。
第一处理单元520,用于将需求识别单元510提供的query所对应的标准算式提供给专用计算模块540。
第一结果产生单元530,用于从专用计算模块540获取计算结果,将该计算结果包含在query的搜索结果中。
其中,上述需求识别单元510识别query需求的具体方式为:判断query与具有计算类需求的query模板是否匹配,如果匹配,则识别出query具有计算类需求;否则识别出query具有普通查询类需求,或者,默认所有query无论是否具有计算类需求,都具有普通查询类需求。
其中,具有计算类需求的query模板是采用数据挖掘或人工的方式预先配置的。该具有计算类需求的query模板可以采用词典结合匹配规则的形式。
具体地,第一处理单元520可以将接收到的query作为转换对象进行自然语言处理,转换为标准算式,将标准算式提供给专用计算模块540。
更进一步地,该装置还可以包括:第二处理单元550和第二结果产生单元560。
需求识别单元510在识别出query具有计算类需求时,进一步判断query具备纯数学计算类需求还是具备基于数学计算的换算类需求,如果是纯数学计算类需求,则将query提供给第一处理单元520;如果是基于数学计算的换算类需求,则将query提供给第二处理单元550。
在识别出query具有计算类需求后,在识别query是纯数学计算类需求还是基于数学计算的换算类需求时,同样可以采用词典结合匹配规则的形式。预先配置包含各种单位的词典,可以配置匹配规则为:query命中词典中至少两个单位。
第二处理单元550,用于提取query中的纯数学计算部分,保留单位部分并确定单位换算公式,将纯数学计算部分发送给第一处理单元520,将单位换算公式发送给专用计算模块540。
第一处理单元520,还用于将第二处理单元550提供的纯数学计算部分作为转换对象进行自然语言处理,转换为标准算式,并将该标准算式提供给专用计算模块540。
此时,专用计算模块540可以首先对第一处理单元520提供的纯数学计算部分转换的标准算式进行计算,获得计算结果后,将该计算结果与单位换算公式进行拼合后再进行计算获得最终的计算结果。
第二结果产生单元560,用于从专用计算模块540获得计算结果,将获得的计算结果包含在query的搜索结果中。
其中,从专用计算模块获得的计算结果为:所述专用计算模块对标准算式继续拧计算获得的计算结果与单位换算公式进行拼合后,再进行计算所获得的计算结果。
其中,该装置中的第一处理单元520可以具体包括:过滤处理子单元521、符号转换子单元522和符号解析子单元523。
过滤处理子单元521,用于对转换对象进行过滤,过滤掉不具备实际运算意义的词语。
符号转换子单元522,用于根据预先设置的中文自然语言与数字之间的映射关系以及中文自然语言与数学运算符之间的映射关系中的至少一种,将过滤处理子单元521处理后的转换对象转换为数字和数学运算符的组合;其中,数学运算符包括以下中的一种或组合:标准数学运算符和自定义数学运算符。
符号解析子单元523,用于如果数学运算符中仅包括自定义数学运算符,则确认符号转换子单元522处理后的转换对象为标准算式;否则,按照各自定义数学运算符对应的解析策略,将符号转换子单元522处理后的转换对象中的各自定义数学运算符按照解析优先级逐一进行解析,从而将转换对象解析为标准算式。
其中,不具备实际运算意义的词语可以通过数据挖掘的方式或人工的方式预先记录在词典中的,包括但不限于以下词语:计算、等于几、等于多少、得多少、得几、结果是什么。还可以包括但不限于以下字符:逗号、句号、空格。
具体地,中文自然语言与数学运算符之间的映射关系包括以下中的一种或组合:
能够直接转换成标准数学运算符的词语与标准数学运算符的映射关系;
搭配使用之前运算结果的连词与自定义数学运算符的映射关系;
表示连接两个数字一起运算的连词与自定义数学运算符的映射关系;
搭配连词一起构成运算的词语与自定义数学运算符的映射关系;
表示数字在前面的一元运算符的词语与自定义数学运算符的映射关系;
表示二元运算符的词语与自定义数学运算符的映射关系;
与运算符搭配使用的动词与自定义数学运算符的映射关系;
表示冗余运算符的词语与自定义数学运算符的映射关系;
表示数字在后面的一元运算符的词语与自定义数学运算符的映射关系;以及,
需要转义的词语与自定义数学运算符的映射关系。
具体的映射关系和解析策略实例可以参见方法实施例三中的表1至表12,在此不再赘述。
上述各自定义数学运算符的解析优先级从高到低顺序可以为:
解析优先级8:表示数字在后面的一元运算符的词语所映射的自定义数学运算符。
解析优先级7:搭配使用之前运算结果的连词所映射的自定义数学运算符。
解析优先级6:表示数字在前面的一元运算符的词语所映射的自定义数学运算符、除了“除”之外表示二元运算符的词语所映射的自定义数学运算符、与运算符搭配使用的动词所映射的自定义数学运算符。
解析优先级5:表示连接两个数字一起运算的连词所映射的自定义数学运算符、搭配连词一起构成运算的词语所映射的自定义数学运算符。
解析优先级4:表示二元运算符的词语中,“除”所映射的自定义数学运算符。
解析优先级3:需要转义的词语所映射的自定义数学运算符。
解析优先级2:表示冗余运算符的词语所映射的自定义数学运算符。
较优地,上述的搭配连词一起构成运算的词语所映射的自定义数学运算符可以由指示配合关系的运算符和标准运算符构成。
表示数字在前面的一元运算符的词语所映射的自定义运算符由指示倒序关系的运算符和标准运算符构成。
表示数字在后面的一元运算符的词语所映射的自定义运算符由指示倒序关系的运算符和标准运算符构成。
表示连接两个数字一起运算的连词所映射的自定义数学运算符为指示配合关系的运算符。
上述指示配合关系(例如方法实施例中采用的“&”)的运算符和指示倒序关系的运算符(例如方法实施例中采用的“@”)。
另外,为了同时满足普通查询类需求,该装置还可以包括:普通搜索单元570。
需求识别单元510如果识别出query具有普通查询类需求,则将query提供给普通搜索单元570。
普通搜索单元570,用于将包含query中关键词的页面结果包含在query的搜索结果中。
更优地,该装置还可以包括:排序处理单元580。
如果需求识别单元510识别出query具有计算类需求又识别出query具有普通查询类需求,则将识别出query的需求强度提供给排序处理单元580。
排序处理单元580,用于将搜索结果中包含的计算结果和页面结果按照识别出query的需求强度顺序进行排序。
下面通过实施例六对上述专用计算模块540的结构进行详细描述。
实施例六、
图6为本发明实施例六提供的专用计算模块的结构示意图,如图6所示,该专用计算模块可以具体包括:操作数栈600、运算符栈601、算式接收子模块602、算式读取子模块603、第一判断子模块604、识别处理子模块605、计算处理子模块606、第二判断子模块607和结果获取子模块608。
算式接收子模块602,用于接收标准算式。
算式读取子模块603,用于自左至右地读取标准算式,将当前读取到的符号发送给第一判断子模块604。
第一判断子模块604,用于判断当前读取到的符号是数字还是运算符,如果是数字,向计算处理子模块606发送第一执行通知;如果是运算符,将当前读取到的符号发送给识别处理子模块605。
识别处理子模块605,用于对当前读取到的符号,或者,对当前读取到的符号与运算符栈601中当前栈顶运算符的运算优先级状况进行识别,若当前读取到的符号为左括号,则向计算处理子模块606发送第三执行通知;若当前读取到的符号为右括号,则向计算处理子模块606发送第四执行通知;若当前读取到的符号为结束符,则向计算处理子模块606发送第五执行通知;若当前读取到的符号不是左括号、右括号和结束符,且当前读取到的符号的运算优先级不高于运算符栈601中当前栈顶运算符的运算优先级,则向计算处理子模块606发送第二执行通知;若当前读取到的符号不是左括号、右括号和结束符,且当前读取到的符号的运算优先级高于运算符栈601中当前栈顶运算符的运算优先级,则向计算处理子模块606发送第三执行通知。
计算处理子模块606,用于接收到第一执行通知后,将当前读取到的符号压入操作数栈600,并向第二判断子模块607发送判断通知;接收到第二执行通知后,根据运算符栈601中当前栈顶运算符的操作性质,从操作数栈600中弹出相应个数的数字,并从运算符栈601中弹出当前栈顶运算符,利用弹出的运算符和数字进行运算,将计算结果压入操作数栈600,触发识别处理子模块605继续执行上述识别的操作;接收到第三执行通知后,将当前读取到的符号压入运算符栈601,向第二判断子模块607发送判断通知;接收到第四执行通知后,循环执行操作S,直到从运算符栈601中弹出左括号时,向第二判断子模块607发送判断通知;接收到第五执行通知后,循环执行操作S,直到运算符栈601为空后,向结果获取子模块608发送获取通知。
第二判断子模块607,用于接收到判断通知后,判断标准算式是否读取完毕,如果否,触发算式读取子模块603继续读取标准算式中的下一个符号;否则,向计算处理子模块606发送第四执行通知。
结果获取子模块608,用于接收到获取通知后,获取操作数栈600栈顶的数字作为标准算式的计算结果。
上述操作S为:根据运算符栈601中当前栈顶运算符的操作性质,从操作数栈600中弹出相应个数的数字,并弹出运算符栈601中的当前栈顶运算符,利用弹出的运算符和数字进行运算,将计算结果压入操作数栈600。
由于第一处理单元520进行转换处理得到的标准算式不一定是标准表达式,可能存在没有意义的括号等情况,例如对数字进行了括号,因此,该装置可以通过设置表达式栈对标准算式进行优化形成标准表达式。此时,该装置可以进一步包括:表达式栈609、表达式处理子模块610以及结果组合子模块611。
表达式处理子模块610,用于在第一判断子模块604判断出当前读取到的符号是数字时,将当前读取到的数字作为一个表达式压入表达式栈609;在计算处理子模块606从运算符栈601中弹出运算符时,判断弹出的运算符是否为左括号,如果否,则从表达式栈609中弹出相应个数的表达式,利用运算符栈弹出的运算符、表达式栈609弹出的表达式拼装成一个新的表达式后压入表达式栈609;如果判断出运算符栈601弹出的运算符为左括号,则进一步判断是否从运算符栈601弹出过上一个运算符、弹出的上一个运算符是否也为左括号以及表达式栈609当前栈顶的表达式开头是否为左括号,如果从运算符栈601弹出过上一个运算符、弹出的上一个运算符不是左括号且表达式栈609当前栈顶的表达式开头不是左括号,则从表达式栈609中弹出一个表达式,将该表达式前后加上括号后作为一个新的表达式压入表达式栈609;否则,保持表达式栈不变。
计算处理子模块606,还用于在运算符栈601为空时,向结果组合子模块611发送组合通知。
结果组合子模块611,用于接收到组合通知后,确定表达式栈609中的表达式为标准表达式,并将标准表达式和结果获取子模块608获取的计算结果进行组合后包含在query的搜索结果中。
较优地,该专用计算模块还可以包括:第一合法判断子模块608,用于判断算式接收子模块602接收到的标准算式是否为合法的标准数学算式,如果否,禁止算式读取子模块603读取该标准算式;如果是,允许算式读取子模块603读取该标准算式。
此处第一合法判断子模块608可以具体判断标准算式是否包含非标准数学算式的符号,如果包含,则确定该标准算式不是合法的标准算式,否则,确定该标准算式为合法的标准算式。
另外,该专用计算模块还可以包括:第二合法判断子模块609,用于判断算式读取子模块603当前读取到的符号是否属于读取的上一符号的合法后继类型,如果是,允许第一判断子模块604执行判断当前读取到的符号是数字还是运算符的操作;否则,确定标准算式不合法,禁止第一判断子模块604执行判断当前读取到的符号是数字还是运算符的操作。
上述第一合法判断子模块608和第二合法判断子模块609可以择一存在,也可以同时存在,图6以两者同时存在为例。
更优地,计算处理子模块606,还可以用于在算式接收子模块602接收到标准算式之后,且算式读取子模块603读取标准算式的第一个符号之前,向运算符栈601压入一个虚拟左括号;当从运算符栈601弹出虚拟左括号时,不做任何处理。其中,虚拟左括号的处理优先级与左括号相同。
所述第二判断子模块在判断出标准算式读取完毕时,还用于设定当前读取到的符号为右括号。
本发明提供的上述专用计算模块可以采用C语言实现,从而使得专用计算模块具有高精度和高准确度的特点。
由以上描述可以看出,本发明提供的方法和装置具备以下优点:
1)通过本发明,能够对用户输入的query进行需求识别,确定该query是否具有计算类需求,并将具有计算类需求的query所对应的标准算式发送给专业计算模块进行计算,然后将专业计算模块的计算结果包含在该query对应的搜索结果中,从而实现通过搜索引擎实现算式的计算功能。
2)本发明不仅能够支持中文自然语言的算式返回计算结果,同样支持度量衡转换、汇率计算、进制转换、时差转换等通过搜索引擎获得结果。
3)本发明能够将计算类需求与现有的普通查询类需求进行较好的融合,在满足用户计算类需求的同时,将普通查询类需求的页面搜索结果也能够返回给用户,并按照需求强度顺序对搜索结果进行排序,最大程度地满足用户的需求。
4)本发明在专用计算模块中引入了表达式栈,通过表达式栈能够使得向用户展示的计算结果中表达式更加清晰和标准。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (36)
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对应的标准算式提供给专用计算模块具体包括:
C1、将所述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;若所述当前读取到的符号为结束符,则执行步骤J10;若当前读取到的符号不是左括号、右括号和结束符,且当前读取到的符号的运算优先级不高于运算符栈中当前栈顶运算符的运算优先级,则执行步骤J7;若所述当前读取到的符号不是左括号、右括号和结束符,且当前读取到的符号的运算优先级高于运算符栈中当前栈顶运算符的运算优先级,则执行步骤J8;
J7、根据运算符栈中当前栈顶运算符的操作性质,从操作数栈中弹出相应个数的数字,并从运算符栈中弹出当前栈顶运算符,利用弹出的运算符和数字进行运算,将计算结果压入操作数栈,继续针对当前读取到的符号转至步骤J6;
J8、将所述当前读取到的符号压入运算符栈,转至步骤J12;
J9、循环执行以下操作:根据运算符栈中当前栈顶运算符的操作性质,从操作数栈中弹出相应个数的数字,并弹出运算符栈中的当前栈顶运算符,利用弹出的运算符和数字进行运算,将计算结果压入操作数栈;直到从运算符栈中弹出左括号时,转至步骤J12;
J10、循环执行以下操作:根据运算符栈中当前栈顶运算符的操作性质,从操作数栈中弹出相应个数的数字,并弹出运算符栈中的当前栈顶运算符,利用弹出的运算符和数字进行运算,将计算结果压入操作数栈;直到运算符栈为空后,执行步骤J11;
J11、最终操作数栈栈顶的数字为所述标准算式的计算结果,结束所述专用计算模块对标准算式的计算流程;
J12、判断标准算式是否读取完毕,如果否,继续读取标准算式的下一个符号,转至步骤J4;否则,转至步骤J9。
13.根据权利要求12所述的方法,其特征在于,在所述步骤J1和步骤J3之间还包括:
J2、判断所述标准算式是否包含非标准数学算式的符号,如果是,结束所述专用计算模块对标准算式的计算流程;如果否,继续执行所述步骤J3。
14.根据权利要求11所述的方法,其特征在于,在所述步骤J4中,如果判断出所述当前读取到的符号是数字,则该方法进一步包括:将所述当前读取到的数字作为一个表达式压入表达式栈;
在所述步骤J7、J9和J10中,如果从所述运算符栈中弹出运算符,则该方法进一步包括:
判断弹出的运算符是否为左括号,如果否,则从所述表达式栈中弹出相应个数的表达式,利用所述弹出的运算符以及所述表达式栈弹出的表达式拼装成一个新的表达式后压入所述表达式栈;
如果所述弹出的运算符为左括号,则进一步判断是否从所述运算符栈弹出过上一个运算符,弹出的上一个运算符是否也为左括号以及所述表达式栈当前栈顶的表达式开头是否左括号,如果从所述运算符栈弹出过上一个运算符,弹出的上一个运算符不是左括号且所述表达式栈当前栈顶的表达式开头不是左括号,则从所述表达式栈中弹出一个表达式,将该表达式前后加上括号后作为一个新的表达式压入所述表达式栈;否则,保持所述表达式栈不变;
在步骤J11中结束所述专用计算模块对标准算式的计算流程时,确定所述表达式栈中的表达式为标准表达式;
步骤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的需求强度顺序进行排序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110036219 CN102096716A (zh) | 2011-02-11 | 2011-02-11 | 一种基于搜索引擎的计算器实现方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110036219 CN102096716A (zh) | 2011-02-11 | 2011-02-11 | 一种基于搜索引擎的计算器实现方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102096716A true CN102096716A (zh) | 2011-06-15 |
Family
ID=44129811
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110036219 Pending CN102096716A (zh) | 2011-02-11 | 2011-02-11 | 一种基于搜索引擎的计算器实现方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102096716A (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102855251A (zh) * | 2011-06-30 | 2013-01-02 | 北京百度网讯科技有限公司 | 一种需求识别的方法及装置 |
CN103020083A (zh) * | 2011-09-23 | 2013-04-03 | 北京百度网讯科技有限公司 | 需求识别模板的自动挖掘方法、需求识别方法及对应装置 |
CN103186569A (zh) * | 2011-12-28 | 2013-07-03 | 北京百度网讯科技有限公司 | 一种需求识别方法及需求识别系统 |
CN103425744A (zh) * | 2013-07-17 | 2013-12-04 | 百度在线网络技术(北京)有限公司 | 一种用于识别用户的查询序列中的寻址需求的方法与设备 |
CN104991897A (zh) * | 2015-05-29 | 2015-10-21 | 百度在线网络技术(北京)有限公司 | 度量衡搜索方法和装置 |
CN105431789A (zh) * | 2014-07-14 | 2016-03-23 | 三菱电机株式会社 | Plc系统及运算式数据创建辅助装置 |
CN105512274A (zh) * | 2015-12-04 | 2016-04-20 | 百度在线网络技术(北京)有限公司 | 信息搜索方法及装置 |
CN110633474A (zh) * | 2019-09-26 | 2019-12-31 | 北京声智科技有限公司 | 一种数学算式识别方法、装置、设备及可读存储介质 |
CN110765324A (zh) * | 2019-11-06 | 2020-02-07 | 天地(常州)自动化股份有限公司 | 建立煤矿监控系统可编程式逻辑运算模型的方法 |
CN111784148A (zh) * | 2020-06-28 | 2020-10-16 | 京东数字科技控股有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
WO2023092437A1 (zh) * | 2021-11-26 | 2023-06-01 | 京东方科技集团股份有限公司 | 一种智能计算的方法及智能交互平板 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5974378A (en) * | 1997-01-06 | 1999-10-26 | Texas Instruments Incorporated | Multi-stage vector quantization with efficient codebook search |
CN101951398A (zh) * | 2010-09-08 | 2011-01-19 | 檀朝东 | 一种工程计算方法、客户端、服务器端及系统 |
-
2011
- 2011-02-11 CN CN 201110036219 patent/CN102096716A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5974378A (en) * | 1997-01-06 | 1999-10-26 | Texas Instruments Incorporated | Multi-stage vector quantization with efficient codebook search |
CN101951398A (zh) * | 2010-09-08 | 2011-01-19 | 檀朝东 | 一种工程计算方法、客户端、服务器端及系统 |
Non-Patent Citations (1)
Title |
---|
《IEEE》 20050629 Petr Kujan Web-based MATHEMATICA Platform for Systems and Control Education , * |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102855251B (zh) * | 2011-06-30 | 2015-07-01 | 北京百度网讯科技有限公司 | 一种需求识别的方法及装置 |
CN102855251A (zh) * | 2011-06-30 | 2013-01-02 | 北京百度网讯科技有限公司 | 一种需求识别的方法及装置 |
CN103020083B (zh) * | 2011-09-23 | 2016-06-15 | 北京百度网讯科技有限公司 | 需求识别模板的自动挖掘方法、需求识别方法及对应装置 |
CN103020083A (zh) * | 2011-09-23 | 2013-04-03 | 北京百度网讯科技有限公司 | 需求识别模板的自动挖掘方法、需求识别方法及对应装置 |
CN103186569A (zh) * | 2011-12-28 | 2013-07-03 | 北京百度网讯科技有限公司 | 一种需求识别方法及需求识别系统 |
CN103186569B (zh) * | 2011-12-28 | 2016-07-13 | 北京百度网讯科技有限公司 | 一种需求识别方法及需求识别系统 |
CN103425744A (zh) * | 2013-07-17 | 2013-12-04 | 百度在线网络技术(北京)有限公司 | 一种用于识别用户的查询序列中的寻址需求的方法与设备 |
CN105431789A (zh) * | 2014-07-14 | 2016-03-23 | 三菱电机株式会社 | Plc系统及运算式数据创建辅助装置 |
CN104991897A (zh) * | 2015-05-29 | 2015-10-21 | 百度在线网络技术(北京)有限公司 | 度量衡搜索方法和装置 |
CN104991897B (zh) * | 2015-05-29 | 2018-09-25 | 百度在线网络技术(北京)有限公司 | 度量衡搜索方法和装置 |
CN105512274A (zh) * | 2015-12-04 | 2016-04-20 | 百度在线网络技术(北京)有限公司 | 信息搜索方法及装置 |
CN105512274B (zh) * | 2015-12-04 | 2020-01-21 | 百度在线网络技术(北京)有限公司 | 信息搜索方法及装置 |
CN110633474A (zh) * | 2019-09-26 | 2019-12-31 | 北京声智科技有限公司 | 一种数学算式识别方法、装置、设备及可读存储介质 |
CN110633474B (zh) * | 2019-09-26 | 2023-04-18 | 北京声智科技有限公司 | 一种数学算式识别方法、装置、设备及可读存储介质 |
CN110765324A (zh) * | 2019-11-06 | 2020-02-07 | 天地(常州)自动化股份有限公司 | 建立煤矿监控系统可编程式逻辑运算模型的方法 |
CN111784148A (zh) * | 2020-06-28 | 2020-10-16 | 京东数字科技控股有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
WO2023092437A1 (zh) * | 2021-11-26 | 2023-06-01 | 京东方科技集团股份有限公司 | 一种智能计算的方法及智能交互平板 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102096716A (zh) | 一种基于搜索引擎的计算器实现方法和装置 | |
CN109886294B (zh) | 知识融合方法、装置、计算机设备和存储介质 | |
CN106649597B (zh) | 一种基于图书内容的图书书后索引自动构建方法 | |
Giugno et al. | Graphgrep: A fast and universal method for querying graphs | |
Zhang et al. | Light-weight domain-based form assistant: querying web databases on the fly | |
CN103778185A (zh) | 一种用于数据库审计系统的sql语句解析方法和系统 | |
CN102654866A (zh) | 例句索引创建方法和装置以及例句检索方法和装置 | |
CN102651013B (zh) | 一种从企业名称数据中提取区域信息的方法及系统 | |
CN102637180B (zh) | 基于正则表达式的文字后处理方法和装置 | |
CN109241068A (zh) | 前后台数据比对的方法、装置及终端设备 | |
CN108363558A (zh) | 面向大数据处理的机器数级数据比较方法 | |
CN110955806A (zh) | 一种针对中文文本的字符串匹配方法 | |
CN115392955A (zh) | 门店去重处理方法、装置、设备及存储介质 | |
CN103076894A (zh) | 一种用于根据对象标识信息构建输入词条的方法与设备 | |
CN113641813A (zh) | 基于知识图谱的问答系统、方法、电子设备及存储介质 | |
CN111190937B (zh) | 籍贯信息的查询方法、装置、电子设备及存储介质 | |
CN110941831B (zh) | 基于分片技术的漏洞匹配方法 | |
CN104021184A (zh) | 一种定位方法与系统 | |
CN106326249B (zh) | 数据整合处理方法及装置 | |
CN110147396B (zh) | 一种映射关系生成方法及装置 | |
Makni et al. | Business process model matching: An approach based on semantics and structure | |
CN102819524B (zh) | 基于关键字的字符序列分割方法及装置 | |
CN109101630A (zh) | 一种应用程序搜索结果的生成方法、装置及设备 | |
US8577861B2 (en) | Apparatus and method for searching information | |
CN109117648B (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20110615 |
|
RJ01 | Rejection of invention patent application after publication |