终于弄明白了一个小问题的用法,很好的解决了词语的选择,实现了批处理版的中文分词正向最大匹配法。其实问题很简单,只是原来我一直没弄懂它的原理。
当句子中含有类似“面包车”一类由三个字组成的词语,并且该词语可以切分为“面包”、“面”、“包”、“车”等两个字组成的词和一个字组成的词时,挑选由三个字组成的词语而忽略由两个字组成的词语——同样的字组成的词语中,挑选字最多的词语作为结果。
如句子:我喜欢在面包车上一边吃面包一边看北京天安门门楼的门
仍需要以上提供的字典的支持。字典没有的字请自行添加。- @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
- rem echo %%k 1
- set /a var=%%j+%%i
- )
- )
- if %var% lss 30 goto lp
- echo.
- echo.
- pause
- goto fjjz
复制代码
[ 本帖最后由 cjiabing 于 2010-9-13 10:26 编辑 ] |