终于弄明白了一个小问题的用法,很好的解决了词语的选择,实现了批处理版的中文分词正向最大匹配法。其实问题很简单,只是原来我一直没弄懂它的原理。
当句子中含有类似“面包车”一类由三个字组成的词语,并且该词语可以切分为“面包”、“面”、“包”、“车”等两个字组成的词和一个字组成的词时,挑选由三个字组成的词语而忽略由两个字组成的词语——同样的字组成的词语中,挑选字最多的词语作为结果。
如句子:我喜欢在面包车上一边吃面包一边看北京天安门门楼的门
仍需要以上提供的字典的支持。字典没有的字请自行添加。 | @echo off&setlocal enabledelayedexpansion | | :fjjz | | cls | | set /p inf= 你对电脑说: | | echo. | | cd.>S.TXT | | for /l %%i in (0,1,100) do ( | | set strdd=!inf:~%%i,4!&if defined strdd set strddo=!strdd:~3,1!&if defined strddo for /f "tokens=1,*" %%a in (dictionary.txt) do if "%%a"=="!strdd!" echo 4 %%i %%a %%b %%i,4 | | set strcc=!inf:~%%i,3!&if defined strcc set strcco=!strdd:~2,1!&if defined strcco for /f "tokens=1,*" %%e in (dictionary.txt) do if "%%e"=="!strcc!" echo 3 %%i %%e %%f %%i,3 | | set strbb=!inf:~%%i,2!&if defined strbb set strbbm=!strbb:~1,1!&if defined strbbm for /f "tokens=1,*" %%x in (dictionary.txt) do if "%%x"=="!strbb!" echo 2 %%i %%x %%y %%i,2 | | set straa=!inf:~%%i,1!&if defined straa for /f "tokens=1,*" %%m in (dictionary.txt) do if "%%m"=="!straa!" echo 1 %%i %%m %%n %%i,1 | | )>>S.TXT | | set var=-1 | | echo 切分结果: | | echo. | | :lp | | set /a var+=1 | | for /f "tokens=1,2,3,*" %%i in (S.txt) do ( | | if !var!==%%j ( | | set /p k= 【%%k】<nul | | | | set /a var=%%j+%%i | | ) | | ) | | if %var% lss 30 goto lp | | echo. | | echo. | | pause | | goto fjjzCOPY |
[ 本帖最后由 cjiabing 于 2010-9-13 10:26 编辑 ] |