CURD 写多了,曾对以下几个问题思虑不解,见缘回答。
随便谈谈,问题较多,不需要具体结果,只谈大概思维逻辑。

  1. 语法检查
    常见操作系统、包括某些 IDE 、文本编辑器都对英文语法、甚至中文语法进行检查,可它内部是如何判断一个单词或者短语的语法是否正确?
    举几个例子

我不懂英文的逻辑,这里不考虑动词名词的结尾改法,因为我不太相信编辑器是把所有词分类后进行处理的? 这工作量太大了。我觉得应该是别的语义相关的吧?
上述有几个词,其中 "xign" 有的人一眼就能识别出这个不是英语,问他为什么?他却没有原因。
同理,编辑器又是如何判断出来的?

  1. 分词
    这个常见于一些操作系统自带的软件,包括 Chrome 地址栏、编辑器、记事本等。
    当你输入完整的一段内容,比如中文的:“保持对陌生人的友善。用知识去帮助别人。”
    若在 Chrome 地址栏输入上述内容,再多次慢慢按 CTRL + BACK SAPCE 那么他会逐个删除所有词组,直至为空。
    这个是怎么做到的?是软件内部自己写的还是操作系统自带的分词?类似 ES 的中文分词原理?
    如果自己写一个 win 桌面软件,用系统自带的编辑器控件、富文本编辑器控件,其中是不附带这部分功能的,要如何实现?
  2. 手机输入法
  3. 键的就不说了,只说九宫格的输入方式。
    比如汉字拼音九宫格的 9426 486 可以组合出很多的可能。
    输入法会给你很多的待选项:

xiao guo
xiang to
zhang to
xian huo/
xiao guo/gun/hun/huo/gu....
...
zi ao hun ....

感觉就是它根据 声母+韵母 把所有的可能性给你列出来了,这个难做吗?
因为日语九宫格的输入,一个键虽然隐藏着 5 个字母。联想上文的输入,但它并不会把所有可能性给你列出来。
根据键位的方向滑动选择其中一个音,那么可能性和结果就确定为一个了,这个几乎等同于 26 键位。
目前为止没有一个日语输入法可以实现类似汉语拼音的输入法那样,做成那样难吗?自己拿开源项目魔改难吗?
还有个疑问就是,所有 拼音或者假名 对应的汉字都以字典形式在程序里吗?还是有更好的实现方式?

没啥魔法,就是分词后暴力匹配,然后最多添加一些模糊匹配(不考虑语义)。现在基于 DL 的语义分析是个黑箱,谁也不知道为什么是最终那个结果。

你是说第一个语法检查还是第二个分词的问题。

建议题主了解一下 NLP 领域中的 “语言模型”,应该能回答前两个问题:简单说就是从大量语料中可以学习出一个模型,这个模型可以判断出一个词在语言中出现概率的大小。

第一个实际就是字典,只不过可以用很高效的查找型字典,比如双 Trie 树之类的

第二个应该是 chrome 的分词功能,分词干的事情都差不多,不管是 ES 里面的分词还是 chrome 的分词,但技术原理会有一定差异,比如有些是字典加状态机,有些是字典加 HMM ,有些是纯深度学习。对分词有兴趣可以去看看斯坦福的 coreNLP ,hanLP ,结巴分词,有很多介绍他们原理的文章

上面这些都涉及到 NLP 相关的算法,对这方面感兴趣可以找一些 NLP 相关的算法看看

字母语言不存在分词,空格就完成了分词,但是存在词组,然而词组也是相对可固定的,但这已经到了语义程度了。语法检查那不就简单了,知道单词知道变形方案(甚至把变形方案也变成一个单词),完活。

中文的分词,就是依赖词库,所有的中文搜索引擎第一步就是首先分词,一般词汇好说,遇到姓氏会麻烦一些。

拼音的排列组合是固定的,我记得当初有输入法在全键盘模式,按下第一个字母就会灰掉不可能的字母。

总体一句话,穷举。

你的这个我想过,把所有的单词组合的可能放一起, 但这样会不会导致安装包很大,我印象比较小的程序也能够做到? 只是暂时想不起来了例子。

好,谢谢,这是我的盲区了,头疼。哈哈

谢谢了解了,你们所说的纯深度学习或者语义分析是在近些年才有的?那之前是怎么实现的,当然我印象记不住之前到底有没有。

大概就是说只有语义分析相关的语言模型的实现,这一种解决之路吧?

中文分词:GitHub 搜索 结巴
中文语法检查基本就算了

再多次慢慢按 CTRL + BACK SAPCE 那么他会逐个删除所有词组,直至为空。这个是怎么做到的?是软件内部自己写的还是操作系统自带的分词?

这个是 IBM ICU 库的分词效果。。

www.hesudu.com/t/854748

好的,star 了,回头可以用起来。

问题一是你想太复杂了,就直接匹配就是了,运算量其实还好,因为可以把词典做成树搜索

厉害,这个也很强大。哈哈,前端都可以轻松分词了。

我爱你🤡🤡🤡🤡🤡🤡

最近在看吴军的<<数学之美>>,应该可以解答这些问题

这是个很认真的人,问个问题都协程格式十分整齐的文档,服

协程-->写成

这种你测试下边界就行,第一个就是语法检查器内置了常用英文单词,然后根据空格或者驼峰分词,KMP ,AC 自动机之类的算法匹配一下,匹配不到就告警
第二个,我看没有网络请求分词,google 应该是预置了一个常用分词到 js 里,然后 js 实现下分词的算法,为什么说是预置的,因为你打个哈士奇、科比,他就是一个一个字删除的
第三个,日文输入方式不太了解,但是本质上这种就是状态机和匹配,我猜测是因为中文输入习惯问题,比如 nh=你好,这也是种中文输入方式,但是日文看五十音图的逻辑,本质大部分时候其实在输入英文,当然需要比较准确的定位每个字母

#18 第一个你可以用生僻单词试一下,大部分都是内置一定词的

第一个应该是静态检查,和语法分析器有关系,第二个涉及到分词,具体的其他大佬已经解答了((