JS / Jquery:使用字典和最长匹配项将字符串转换为单词的文本分段脚本?

雨果

给定这样的字符串:

 var str = "thisisinsane";

辅以字典中的单词列表,例如:

 var dic = [ "insane", "i", "is", "sin", "in", "this", "totally" ];

如何拆分str成单词?

对于此字符串,有3个单词可识别。但是我们需要避免陷阱。为了在大多数情况下避免出现这些错误,我知道我们可以攻击左侧的句子,并尝试找到最长的单词。找到后,我们可以攻击字符串的其余部分,依此类推。

在下面:右下角的输入,可能的陷阱以及所需的输出。

                      thisisinsane
                          |
                          |
                     (this)isinsane
                     /            \
                    /              \
          (this,i)sinsane         (this,is)insane
              /                     /           \
             /                     /             \
  (this,i,sin)ane          (this,is,in)sane    (this,is,insane)
                                /                   <BEST IS>
                               /                    <THIS ONE>
                       (this,is,in,sane)

最后,我们要获得:

 var splited = ["this", "is", "insane"];
英戈·布尔克(IngoBürk)

这是一个快速的实现,它将从左到右进行搜索,并首先匹配字典中最长的单词(jsfiddle)。但是,我不确定自己独立实施此方法是否非常聪明,因为这听起来像是一个复杂的领域,即使对这个主题一无所知,我也可以说这种算法存在缺陷。如果有的话,最好去寻找现有的库。

不用说,这是很快一起输入的。它没有以任何方式针对性能进行优化(它使用了递归,这实际上根本没有必要),并且也没有经过广泛的测试。不过,它适用于您的示例数据以及我测试过的一些变体。我希望将一些工作留给OP,以防我给出完整的代码示例,因此,如果您想使用它,可以随时进行改进。

var splitByDictionary = function (input, dictionary) {
    "use strict";

    // make sure we're going to look for longest-possible matches first
    dictionary.sort( function (a, b) {
        return b.length - a.length;
    } );

    var foundWords = [],
        remaining = input;

    var result = (function match () {
        if( remaining.length === 0 ) {
            return true;
        }

        for( var i = 0; i < dictionary.length; i++ ) {
            if( remaining.substr( 0, dictionary[i].length ) === dictionary[i] ) {
                foundWords.push( dictionary[i] );
                remaining = remaining.substr( dictionary[i].length );

                return match();
            }
        }

        return false;
    })();

    return result ? foundWords : null;
};

var splitted = splitByDictionary( "thisisinsane", ["insane", "i", "is", "sin", "in", "this", "totally"] );
console.log( splitted ); // ["this", "is", "insane"]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

D3.js:根据最长字符串的宽度转换文本组

来自分类Dev

如何使用 Node.js 将 exe 的机器码转换为 1 和 0 的字符串?

来自分类常见问题

将字符串转换为数字node.js

来自分类Dev

将字符串转换为js数组

来自分类Dev

JS数组-将字符串转换为密钥

来自分类Dev

将sweet.js参数转换为字符串

来自分类Dev

JS将字符串转换为多维对象键

来自分类Dev

JS:将布尔列表转换为紧凑字符串?

来自分类Dev

尝试将js字符串转换为NSDateFormatter

来自分类Dev

将字符串转换为js数组

来自分类Dev

Node.js将字符串转换为JSON

来自分类Dev

封闭js框架-将ArrayBuffer转换为字符串

来自分类Dev

JS将字符串转换为多维对象键

来自分类Dev

将 JSON 字符串转换为 JS 对象

来自分类Dev

JS:将数组对象转换为点字符串

来自分类Dev

JS:如何将字符串转换为JS对象(**不**转换为JSON)?

来自分类Dev

使用字典将字符串转换为char

来自分类Dev

使用JSON.stringify将JS对象转换为json字符串

来自分类Dev

使用moment.Js将字符串转换为24小时制

来自分类Dev

如何使用Node.js将字节数组转换为字符串?

来自分类Dev

如何使用Azure将Blob转换为Node.js中的字符串

来自分类Dev

使用JSON.stringify将JS对象转换为json字符串

来自分类Dev

如何使用Angular.js将字符串从数据库转换为XML

来自分类Dev

使用moment.Js将字符串转换为24小时制

来自分类Dev

Node.js将URL字符串转换为仅使用路径名

来自分类Dev

如何使用 js-joda 将任何 ISO8601 字符串转换为 LocalTime?

来自分类Dev

如何使用js将类似数组的字符串转换为数组?

来自分类Dev

使用时刻时区js将日期字符串转换为带时区的日期

来自分类Dev

将JSON字符串转换为JSON对象,因此无需在基本jquery.dataTables.js中进行更改

Related 相关文章

  1. 1

    D3.js:根据最长字符串的宽度转换文本组

  2. 2

    如何使用 Node.js 将 exe 的机器码转换为 1 和 0 的字符串?

  3. 3

    将字符串转换为数字node.js

  4. 4

    将字符串转换为js数组

  5. 5

    JS数组-将字符串转换为密钥

  6. 6

    将sweet.js参数转换为字符串

  7. 7

    JS将字符串转换为多维对象键

  8. 8

    JS:将布尔列表转换为紧凑字符串?

  9. 9

    尝试将js字符串转换为NSDateFormatter

  10. 10

    将字符串转换为js数组

  11. 11

    Node.js将字符串转换为JSON

  12. 12

    封闭js框架-将ArrayBuffer转换为字符串

  13. 13

    JS将字符串转换为多维对象键

  14. 14

    将 JSON 字符串转换为 JS 对象

  15. 15

    JS:将数组对象转换为点字符串

  16. 16

    JS:如何将字符串转换为JS对象(**不**转换为JSON)?

  17. 17

    使用字典将字符串转换为char

  18. 18

    使用JSON.stringify将JS对象转换为json字符串

  19. 19

    使用moment.Js将字符串转换为24小时制

  20. 20

    如何使用Node.js将字节数组转换为字符串?

  21. 21

    如何使用Azure将Blob转换为Node.js中的字符串

  22. 22

    使用JSON.stringify将JS对象转换为json字符串

  23. 23

    如何使用Angular.js将字符串从数据库转换为XML

  24. 24

    使用moment.Js将字符串转换为24小时制

  25. 25

    Node.js将URL字符串转换为仅使用路径名

  26. 26

    如何使用 js-joda 将任何 ISO8601 字符串转换为 LocalTime?

  27. 27

    如何使用js将类似数组的字符串转换为数组?

  28. 28

    使用时刻时区js将日期字符串转换为带时区的日期

  29. 29

    将JSON字符串转换为JSON对象,因此无需在基本jquery.dataTables.js中进行更改

热门标签

归档