提问一个关于自己不了解的编程领域问题?语言相关,输入法,分词,语法检查 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
ellermister
V2EX    程序员

提问一个关于自己不了解的编程领域问题?语言相关,输入法,分词,语法检查

  ellermister 2023 年 1 月 15 日 2436 次点击
这是一个创建于 1091 天前的主题,其中的信息可能已经有所发展或是发生改变。

CURD 写多了,曾对以下几个问题思虑不解,见缘回答。

随便谈谈,问题较多,不需要具体结果,只谈大概思维逻辑。

1. 语法检查

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

举几个例子

example

我不懂英文的逻辑,这里不考虑动词名词的结尾改法,因为我不太相信编辑器是把所有词分类后进行处理的? 这工作量太大了。我觉得应该是别的语义相关的吧?

上述有几个词,其中 "xign" 有的人一眼就能识别出这个不是英语,问他为什么?他却没有原因。 同理,编辑器又是如何判断出来的?

2. 分词

这个常见于一些操作系统自带的软件,包括 Chrome 地址栏、编辑器、记事本等。

当你输入完整的一段内容,比如中文的:“保持对陌生人的友善。用知识去帮助别人。” 若在 Chrome 地址栏输入上述内容,再多次慢慢按 CTRL + BACK SAPCE 那么他会逐个删除所有词组,直至为空。

这个是怎么做到的?是软件内部自己写的还是操作系统自带的分词?类似 ES 的中文分词原理?

如果自己写一个 win 桌面软件,用系统自带的编辑器控件、富文本编辑器控件,其中是不附带这部分功能的,要如何实现?

split word

3. 手机输入法

26 键的就不说了,只说九宫格的输入方式。 比如汉字拼音九宫格的 9426 486 可以组合出很多的可能。 输入法会给你很多的待选项:

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

感觉就是它根据 声母+韵母 把所有的可能性给你列出来了,这个难做吗?

因为日语九宫格的输入,一个键虽然隐藏着 5 个字母。联想上文的输入,但它并不会把所有可能性给你列出来。

根据键位的方向滑动选择其中一个音,那么可能性和结果就确定为一个了,这个几乎等同于 26 键位。

目前为止没有一个日语输入法可以实现类似汉语拼音的输入法那样,做成那样难吗?自己拿开源项目魔改难吗?

还有个疑问就是,所有 拼音或者假名 对应的汉字都以字典形式在程序里吗?还是有更好的实现方式?

ja-input

zh-input

21 条回复    2023-01-17 12:47:53 +08:00
thinkershare
    1
thinkershare  
   2023 年 1 月 15 日
没啥魔法,就是分词后暴力匹配,然后最多添加一些模糊匹配(不考虑语义)。现在基于 DL 的语义分析是个黑箱,谁也不知道为什么是最终那个结果。
ellermister
    2
ellermister  
OP
   2023 年 1 月 15 日
@thinkershare 你是说第一个语法检查还是第二个分词的问题。
shortmund
    3
shortmund  
   2023 年 1 月 15 日
建议题主了解一下 NLP 领域中的 “语言模型”,应该能回答前两个问题:简单说就是从大量语料中可以学习出一个模型,这个模型可以判断出一个词在语言中出现概率的大小。
cowcomic
    4
cowcomic  
   2023 年 1 月 15 日   4
第一个实际就是字典,只不过可以用很高效的查找型字典,比如双 Trie 树之类的

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

上面这些都涉及到 NLP 相关的算法,对这方面感兴趣可以找一些 NLP 相关的算法看看
cpstar
    5
cpstar  
   2023 年 1 月 15 日
字母语言不存在分词,空格就完成了分词,但是存在词组,然而词组也是相对可固定的,但这已经到了语义程度了。语法检查那不就简单了,知道单词知道变形方案(甚至把变形方案也变成一个单词),完活。

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

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

总体一句话,穷举。
ellermister
    6
ellermister  
OP
   2023 年 1 月 15 日
@cpstar 你的这个我想过,把所有的单词组合的可能放一起, 但这样会不会导致安装包很大,我印象比较小的程序也能够做到? 只是暂时想不起来了例子。
ellermister
    7
ellermister  
OP
   2023 年 1 月 15 日
@shortmund 好,谢谢,这是我的盲区了,头疼。哈哈
ellermister
    8
ellermister  
OP
   2023 年 1 月 15 日
@cowcomic 谢谢了解了,你们所说的纯深度学习或者语义分析是在近些年才有的?那之前是怎么实现的,当然我印象记不住之前到底有没有。

大概就是说只有语义分析相关的语言模型的实现,这一种解决之路吧?
Aloento
    9
Aloento  
   2023 年 1 月 15 日
中文分词:GitHub 搜索 结巴
中文语法检查基本就算了
est
    10
est  
   2023 年 1 月 15 日
> 再多次慢慢按 CTRL + BACK SAPCE 那么他会逐个删除所有词组,直至为空。这个是怎么做到的?是软件内部自己写的还是操作系统自带的分词?


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

t/854748
ellermister
    11
ellermister  
OP
   2023 年 1 月 15 日
@Aloento 好的,star 了,回头可以用起来。
mxT52CRuqR6o5
    12
mxT52CRuqR6o5  
   2023 年 1 月 15 日 via Android
问题一是你想太复杂了,就直接匹配就是了,运算量其实还好,因为可以把词典做成树搜索
ellermister
    13
ellermister  
OP
   2023 年 1 月 15 日
@est 厉害,这个也很强大。哈哈,前端都可以轻松分词了。
b1ghawk
    14
b1ghawk  
   2023 年 1 月 16 日 via Android
我爱你
t0iletb0mber
    15
t0iletb0mber  
   2023 年 1 月 16 日
最近在看吴军的<<数学之美>>,应该可以解答这些问题
NoOneNoBody
    16
NoOneNoBody  
   2023 年 1 月 16 日
这是个很认真的人,问个问题都协程格式十分整齐的文档,服
NoOneNoBody
    17
NoOneNoBody  
   2023 年 1 月 16 日
@NoOneNoBody
协程-->写成
Chinsung
    18
Chinsung  
   2023 年 1 月 16 日
这种你测试下边界就行,第一个就是语法检查器内置了常用英文单词,然后根据空格或者驼峰分词,KMP ,AC 自动机之类的算法匹配一下,匹配不到就告警
第二个,我看没有网络请求分词,google 应该是预置了一个常用分词到 js 里,然后 js 实现下分词的算法,为什么说是预置的,因为你打个哈士奇、科比,他就是一个一个字删除的
第三个,日文输入方式不太了解,但是本质上这种就是状态机和匹配,我猜测是因为中文输入习惯问题,比如 nh=你好,这也是种中文输入方式,但是日文看五十音图的逻辑,本质大部分时候其实在输入英文,当然需要比较准确的定位每个字母
Chinsung
    19
Chinsung  
   2023 年 1 月 16 日
@Chinsung #18 第一个你可以用生僻单词试一下,大部分都是内置一定词的
Cola98
    20
Cola98  
   2023 年 1 月 16 日
第一个应该是静态检查,和语法分析器有关系,第二个涉及到分词,具体的其他大佬已经解答了((
icatme
    21
icatme  
   2023 年 1 月 17 日 via Android
第一个问题,看你描述应该是拼写检查,word 的检查就需要有相应的字典,而且早期版本显示有顺序。
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2647 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 25ms UTC 02:52 PVG 10:52 LAX 18:52 JFK 21:52
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86