`
orange.lpai
  • 浏览: 92669 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Lingpipe中的spell模块-搜索建议

阅读更多
搜索建议
Lingpipe提供了一种可选择的拼写纠错方式,能对用户未输入完整的查询进行提示最相近的查询建议。


图片中显示了google搜索框中的选择性纠错模型对查询进行补充完整。
例如,首行搜索建议词是”amzon”,尽管用户输入查询”anaz”,这并不惊奇,因为那些以”anaz”为前缀的建议词的搜索结果比较小。
不仅有词的搜索建议,还有短语纠错建议。比如一些搜索词像”anazao salon”
搜索建议和拼写纠错之间的一个重要不同点为:搜索建议是在确定的搜索短语集中选择的。

I want to find anaz,是没有建议的短语的

找出有数量的短语

例如我们的demo,我们假设用户提供一批包含数量的短语。例如我们提供一批美国各州名及对应人口数。文件格式如下示例:
Alabama 4599000
Alaska 670000
Arizona 6166000
Arkansas 2811000
California 36458000
Colorado 4753000
Connecticut 3505000
Delaware 853000
District of Columbia 58200
Florida 18090000
...


我们刚好使用州人口数(估计数目在2006年中段),用于人口搜索可能不是个好的方式。如果想查询美国各州的人口数却是个好方式。但是如果想找寻找旅游目的地,夏威夷和哥伦比亚特区比其它地方人口建议还多。通常上,数量将要被平衡最流行的结果,然后将反应用户的特殊偏好。

运行命令行demo
我们包含命令行的demo和GUI demo,我们西姆分别描述
1. 命令行
> ant complete-cmd

|N|
 -3.95 New York
 -5.08 North Carolina
 -5.10 New Jersey
 -6.90 Nevada
 -7.26 New Mexico

|New|
 -3.95 New York
 -5.10 New Jersey
 -7.26 New Mexico
 -7.83 New Hampshire
-16.90 Nevada

|New Y|
 -3.95 New York
-15.10 New Jersey
-17.26 New Mexico
-17.83 New Hampshire

|New Yor|
 -3.95 New York

|Mew |
-13.95 New York
-15.10 New Jersey
-17.26 New Mexico
-17.83 New Hampshire

|U|
 -6.87 Utah
-13.04 California
-13.67 Texas
-13.95 New York
-14.05 Florida

|Uta|
 -6.87 Utah
-23.04 California

|ZebraFish|


这里用户输入一个查询,下面提示五个自动搜索建议词。其中下面的建议词按照分值排序,分值越高排在越上面。
同样我们也得到那些不是靠前缀匹配的建议词,例如用户输入'<new>时,下面提示的词第五个为''Nevada"。
运行GUI Demo
如果你喜欢玩查询,你既可以通过命令行的方式来得到,也可以通过GUI的方式得到
接口如下图所示:
输入<New Y>下拉框有三个提示
搜索问题
像lingpipe 中的javadoc中解释的那样,这个搜索建议工具能通过前缀匹配得到分值较高最相近的短语。建议短语得分是通过短语得分之和和最高得分来进行计算的,而且是最大似然概率估计打分。另外词的数量被所有数量之和分别进行。例如输入<Mew y>匹配"New York"需要对第一个字母'M'替换为'N'。这中分值利用权重编辑距离来计算,仅仅只为拼写提示。
代码示例
配置搜索建议demo的参数接口,只需要一些正确的短语及其数量组成的构造方法,以及权重编辑距离的搜索参数
下面是命令行的main方法代码,调用类src/AutoCompleteCommand.java
public static void main(String[] args) throws IOException {
    File wordsFile = new File(args[0]);
    String[] lines = FileLineReader.readLineArray(wordsFile,"ISO-8859-1");
    Map<String,Float> counter = new HashMap<String,Float>(200000);
    for (String line : lines) {
        int i = line.lastIndexOf(' ');
        if (i < 0) continue;
        String phrase = line.substring(0,i);
        String countString = line.substring(i+1);
        Float count = Float.valueOf(countString);
        counter.put(phrase,count);
    }
.


如上代码所示,使用FileLineReader.readLinesArray() 方法,按指定编码将日志词库文件转换为数组。然后将数组中的词语数字插入到Counter(一个map)中。
下一步配置编辑距离参数,来衡量目标短语的前缀与查询前缀的距离值。这个类采用的是 fix-weighted编辑距离,时间上的任何编辑距离都可以使用
double matchWeight = 0.0;
    double insertWeight = -10.0;
    double substituteWeight = -10.0;
    double deleteWeight = -10.0;
    double transposeWeight = Double.NEGATIVE_INFINITY;
    FixedWeightEditDistance editDistance
        = new FixedWeightEditDistance(matchWeight,
                                      deleteWeight,
                                      insertWeight,
                                      substituteWeight,
                                      substituteWeight,
                                      transposeWeight);



最后我们需要配置拼写纠错器:
int maxResults = 5;
    int maxQueueSize = 10000;
    double minScore = -25.0;
    AutoCompleter completer
        = new AutoCompleter(counter, editDistance,
                            maxResults, maxQueueSize, minScore);



此外Counter和编辑距离,最大结果数量,最大搜索队列大小,返回结果最大分值等参数的配置。
最后,我们配置完所有参数并 运行搜索建议demo
for (int i = 1; i < args.length; ++i) {
        SortedSet<ScoredObject<String>> completions
            = completer.complete(args[i]);




下面java.util.SortedSet包含对象ScoredObject<String>objects,它由字符串和分值组成,
我们得到completions对象后,打印它们:
System.out.println("\n|" + args[i] + "|");
        for (ScoredObject<String> so : completions)
            System.out.printf("%6.2f %s\n", so.score(), so.getObject());
    }

    
部署搜索建议
总共有3中参数,包括建议调整值,编辑距离和搜索参数。这个编辑距离和拼写纠错中的编辑距离很相似。
最大结果数量需要系统较多资源,所以结果集小相对来说计算简单些。
最大队列数量暗示在搜索建议工具调整前有多大的潜在搜索建议短语集。调整以后,错误结果会尽量减少,大大提高准确率
  • 大小: 13.1 KB
  • 大小: 6.5 KB
分享到:
评论
1 楼 申公子 2014-02-10  
你好 请问就lingpipe中文分词 情感分析方面的问题和你讨论下吗?

相关推荐

    Python库 | spellchecker-0.2.linux-x86_64.tar.gz

    在实际应用中,`spellchecker`库可能通过接口提供错误单词的建议,或者集成到文本编辑器、聊天机器人、搜索引擎等应用中,对输入的文本进行实时校验。为了有效地利用这个库,开发者需要了解Python编程基础,特别是...

    PyPI 官网下载 | NlpToolkit-SpellChecker-1.0.12.tar.gz

    拼写检查是NLP中的一种基本技术,它通过对文本进行分析,找出可能的拼写错误,并提供正确的拼写建议。NlpToolkit-SpellChecker库利用了统计学和语言学的方法,通过构建概率模型来判断单词是否正确拼写。对于错误的...

    Qt5 Creator SpellChecker-Plugin_v2.0.1_x86

    Qt Creator 也具有拼写检查。前人栽树,后人乘凉。 Qt 5.12.0 测试通过,详见 http://blog.davidrobot.com/2019/02/qt-creator-spellchecker-plugin.html

    WoW-Spell-Editor 魔兽世界3.3.5a版本dbc文件编辑器

    .NET FrameWork 4.8 已经对Github上的最新版本进行调整,可以无错运行导入Spell App.Config配置数据链接及新建数据库名称 WoW-Spell-Editor-master |____Documentation BandingList对应dbc文件二进制字段列表,语言...

    lingpipe-4.1.0.jar 自然语言处理工具包

    包括的模块: 主题分类(Top Classification)、命名实体识别(Named Entity Recognition)、词性标注(Part-of Speech Tagging)、句题检测(Sentence Detection)、查询拼写检查(Query Spell Checking)、兴趣...

    英文单词拼写混淆集:spell-errors.txt

    英文单词拼写混淆集:spell-errors.txt

    Python库 | spell-0.41.26-py2.py3-none-any.whl

    在Python中,这类库常用于文本分析、自然语言处理(NLP)或者在编写文本编辑器、搜索引擎等应用时确保输入的正确性。例如,它可能提供了检查单词拼写错误、建议更正、学习新词汇等功能。对于开发涉及大量文字处理的...

    lucene-spellchecker-3.6.2.jar

    java运行依赖jar包

    codemirror-spell-checker:在CodeMirror中进行简单的拼写检查

    npm install codemirror-spell-checker --save通过。 bower install codemirror-spell-checker --save通过 。 请注意,jsDelivr可能需要几天时间才能更新到最新版本。 &lt; link rel =" stylesheet " href =" ...

    Python库 | spell-0.21.0-py2.py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:spell-0.21.0-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | spell-0.22.0-py2.py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:spell-0.22.0-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | spell-0.41.32-py2.py3-none-any.whl

    "spell" 库很可能是一个拼写检查工具,它可能包含了各种算法和数据结构,用于帮助开发者检测文本中的拼写错误,并提供修正建议。在文本编辑器、文档处理软件或者在线聊天应用中,这类库非常实用,可以提高用户体验并...

    spell-errors.txt

    拼写纠错配套资源:该文件记录了很多用户写错的单词和对应正确的单词,可以通过该文件确定每个正确的单词所对应的错误拼写方式,并计算出每个错误拼写方式出现的概率

    Python库 | spell-0.40.5-py2.py3-none-any.whl

    它包含已编译的Python扩展模块,纯Python模块,以及所需的元数据。这种格式使得安装过程更快捷,因为它们不需要在用户的系统上进行编译,尤其在跨平台部署时非常有用。".py2.py3-none-any"部分表示这个wheel文件是...

    spell-bound-blocks:服务器端Minecraft Mod,通过分配保护级别来神奇地保护您的块

    1. 安装与配置:首先,你需要将下载的“spell-bound-blocks-master”压缩包解压,并将其导入到你的服务器环境中。然后,根据提供的文档配置Mod的设置,包括保护级别的定义、权限的分配等。 2. 权限管理:通过命令行...

    spell-checker.js:简单的可扩展工具,用于拼写检查

    Spell-checker.js 简单的可扩展工具,用于拼写检查 自述: English 支持的语言 英语 俄语 快速开始 安装: npm i spell-checker-js 代码 const spell = require ( 'spell-checker-js' ) // Load dictionary ...

    Python库 | spell-0.30.17-py2.py3-none-any.whl

    - `spell`库可能是一个用于拼写检查或校正的工具,它可能提供了检查字符串中的单词是否正确拼写的功能,或者提供自动纠错建议。 - 这个库可能包含了一些算法,如基于哈夫曼树的动态规划算法,或者更现代的机器学习...

    WoW_Spell_Editor_v1_8_8.exe

    wow spell editor from github。 魔兽世界技能编辑器,来自git

Global site tag (gtag.js) - Google Analytics