截止日期后,Bigram语料库——我们送给你的礼物…
unigrams.txt.gz格式
有利地4 约兰德12 菲尔莫尔的4 坎塔2 卡伊班达3 索利曼2 论述92 约兰达11 劝阻者1
大拉姆斯.txt.gz
军事兼并4 军事欺骗1 军事语言1 军事立法1 军事复杂性1 军官61 军事骚乱1 军事阴谋1 军人退役2
三角音-同音异义词.txt.gz
给小狗1 4只小狗 小狗死了1 一只小狗和四只 一只名叫2的小狗 小狗3岁 三只小狗 一只小狗 一只小狗当2
一种校对软件服务的设计
演示
幻灯片
纸类
更多深度
AtD源代码和引导数据 –AtD的服务器端核心在GNU GPL下可用 测量误用单词校正器 –用于复制实验的数据/代码,该实验用于测量AtD的真实错误检测能力 我如何尝试捕捉错误 –论文掩盖了使用Trie生成建议库的过程。 只是没有足够的空间来解释它。这篇博客文章详细介绍了它。
测量实词纠错器
混淆集
查找错误
让我们衡量一下
另一个评估
最后的想法
谦逊的起源:PolishMyWriting.com
PolishMyWriting.com的工作原理
PolishMyWriting.com怎么了?
关于语言模型
拯救痛苦
语言模型API
$ java-Xmx1536M-jar库/sleep.jar >>欢迎使用睡眠脚本语言 > 相互作用 >>欢迎使用交互式模式。 键入代码,然后键入“.” 在一行上单独执行代码。 单独在一行上键入Ctrl+D或“done”以退出交互模式。 导入*from:lib/spellutils.jar; $handle=openf('models/model.bin'); $model=readObject($handle); 关闭($handle); println(“加载的$模型”); . 加载 org.dashnine.preforitor.LanguageModel@5cc145f9 完成
统计字数
> x[$modelcount:“hello”] 153 > x[$型号计数:“世界”] 26355 > x[$型号计数:“the”] 3046771
单词概率
> x[$model Pword:“the”] 0.061422322118108906 > x[$model Pword:“自动”] 8.063923690767558E-7号 > x[$model Pword:“fjsljnfnsk”] 0
带上下文的单词概率
Pbigram1(“上一个”,“单词”)
> x[$model Pbigram1:“to”,“bee”] 1.8397294594205855E-5型 > x[$model Pbigram1:“to”,“be”] 0.06296975819264979
Pbigram2(“单词”,“下一个”)
> x[$model Pbigram2:“蜜蜂”,“安”] 0 > x[$model Pbigram2:“be”,“an”] 0.014840446919206074
一个小技巧
> x[$model Pword:“纽约”] 3.3241509434266565E-4号 > x[$model Pword:“很多”] 2.198830392380437E-4号 > x[$model Pbigram1:“它”,“很多”] 8.972553689218159E-5号 > x[$model Pbigram2:“很多”,'0END.0'] 6.511467636360339E-7号
收集字典
> x[$模型收获:1000000] [a,of,to,and,the,0END.0,0BEGIN.0]
下一步
基于NGramJ的N-Gram语言猜测
正在运行
$ 猫>a.txt 这是一个测试。 $ java-jar cngram.jar-lang2 a.txt 速度:en:0.667 ru:0.000 pt:0.000。。 de:0.000|0.0E0|0.0E0 dt=2812 $ cat>b.txt文件 维基百科作者ein Projekt zum Aufbau einer Enzyklopädie aus freien Inhalten in allen Sprachen der Welt。 $ java-jar cngram.jar-lang2 b.txt 速度:de:0.857 ru:0.000 pt:0.000。。 英语:0.000|0.0E0|0.0E0 dt=2077
使用
导入de.spieleck.app.cngram。 NGramProfiles; protected NGramProfiles profiles=新建NGramProfiles(); public String getLanguage(字符串文本){ NGramProfiles。 Ranker-Ranker=档案.getRanker(); 等级账户(文本); NGramProfiles。 排名结果结果=ranker.getRankResult(); return result.getName(0); }
添加新语言
$ java-jar cngram.jar-创建id_big id_corpus.txt 创建了新的配置文件“idbig.ngp”。
%克=ohash(); setMissPolicy(%grams,{return@();}); $句柄=openf(@ARGV[0]); $banner=readln($handle); readln($handle);# 使用ngramcount值 而$text(readln($handle)){ ($gram,$count)=分割('',$text); if(strlen($gram)<=2|$count>20000){ 推送(%grams[strlen($gram)],@($grams,$count)); } } 关闭($handle); 子排序元组{ 返回$2[1]<=>$1[1]; } println($banner); printAll(map({return join(“”,$1);},sort(&sortTuple,%grams[1])); printAll(map({return join(“”,$1);},sort(&sortTuple,%grams[2])); printAll(map({return join(“”,$1);},sort(&sortTuple,%grams[3])); printAll(map({return join(“”,$1);},sort(&sortTuple,%grams[4]));
$ java-jar库/sleep.jar排序.sl id_big.ngp>id.ngp
$ 猫>c.txt 维基百科上的数据来源于印度尼西亚,而非印尼 $ java-jar cngram.jar-lang2 c.txt 速度:id:0.857 ru:0.000 pt:0.000。。 de:0.000|0.0E0|0.0E0 dt=1872
我如何尝试提出拼写建议
问题:我如何提出建议
三人行
次级试验{ 本地(“$trie$word$x$root$letter”); $trie=%(); 每个$word($1){ $root=$trie; for($x=0;$x<strlen($word)$ x++){ $letter=charAt($word,$x); if($letter!in$root){ $root[$letter]=%(); } $root=$root[$letter]; } $root['__']=$word; } 返回$trie; }
$ java-jar库/sleep.jar >>欢迎使用睡眠脚本语言 > > 相互作用 >>欢迎使用交互式模式。 键入代码,然后键入“.” 在一行上单独执行代码。 在一行中单独键入Ctrl+D或“done”以退出交互模式。 include(“trie.sl”); $trie=trie(@(“苹果”,“蝙蝠”,“巴特”,”battle“,”cat“); println($trie); . %(b=> %(a=> %(t=> %(t=> %(l=> %(e=> %(__=>“战斗”) ) ), __=>“bat”), r=> %(t=> %(__=>“巴特”) ) ) ), c=>%(a=>%), a=>%(p=>%) )
sub英寸Trie{ 本地(“$x$word$trie$letter”); ($word,$trie)=@_; for($x=0;$x<strlen($word)$ x++){ $letter=charAt($word,$x); if($trie中的$letter!){ 回报; } $trie=$trie[$letter]; } 返回iff($trie['__']eq$1); }
生成建议
子编辑{ 本地(“$trie$word$results$depth$root$branch$letter”); ($trie,$word,$results,$depth)=@_; if(strlen($word)==0&&$depth>=0&$trie['__']ne''){ $results[$trie['__']]=1; } 如果($depth>=1){ #删除。 [删除当前字母,然后在当前分支上尝试它--看看会发生什么] if(strlen($word)>1){ 编辑($trie、substr($word,1)、$results、$depth-1); } 其他{ 编辑($trie,“”,$results,$depth-1); } foreach$letter=>$branch($trie){ if($字母eq'__'){continue;} #插入。 [将当前单词(无更改)传递给每个分支进行处理] 编辑($branch、$word、$results、$depth-1); #替代。 [将当前单词无首字母传递给每个分支进行处理] if(strlen($word)>1){ 编辑($branch、substr($word,1)、$results、$depth-1); } 其他{ 编辑($branch,“”,$results,$depth-1); } } #换位。 [互换第一个和第二个字母] if(strlen($word)>2){ 编辑($trie,charAt($word,1)。 charAt($word,0)。 substr($word,2),$results,$depth-1); } else if(strlen($word)==2){ 编辑($trie,charAt($word,1)。 charAt($word,0),$results,$depth-1); } } #继续读下一封信。 (未进行编辑) if(strlen($word)>=1&&charAt($word,0)in$trie){ $letter=charAt($2,0); 如果(strlen($word)>1){ 编辑($trie[$letter],substr($word,1),$results,$depth); } else if(strlen($word)==1){ 编辑($trie[$letter],“”,$results,$depth); } } #结果存储在散列中以防止重复单词 返回键($results); }
$ java-jar库/sleep.jar >>欢迎使用睡眠脚本语言 > 相互作用 >>欢迎使用交互式模式。 键入您的代码,然后键入“。” 在一行上单独执行代码。 在一行中单独键入Ctrl+D或“done”以退出交互模式。 include(“trie.sl”); $dictionary=readAll(openf(“/usr/share/dict/words”); println(大小($dictionary)); . 98569 $trie=trie($dictionary); printAll(编辑($trie,“成功”,%(),2)); . 最可靠的 没有阳光 酱汁 烂透了 酱汁的 过量的 凹陷 强调 卢斯的 西塞斯 接近 胁迫 碟子 公爵夫人 超级 猜测 起诉人 吸盘 成功 起诉
关于一个小型上下文拼写检查器的思考
问题陈述
建议的解决方案
从维基百科生成纯文本语料库
在我到领取社会保险金的年龄之前完成 容忍错误并在没有我干预的情况下完成
步骤1:下载维基百科提取器工具包
wget公司 http://www.polishmywriting.com/download/wikipedia2text_rsm_mods.tgz tar zxvf维基百科2text_rsm_mods.tgz 光盘wikipedia2text
步骤2:下载并提取维基百科数据转储
wget公司 http://download.wikimedia.org/frwiki/20091129/frwwiki-20091129-pages-articles.xl.bz2下载 bunzip2 frwiki-20091129-pages-articles.xml.bz2
步骤3:从维基百科数据中提取文章数据
mkdir输出 ./xmldump2files.py frwiki-20091129-pages-articles.xml输出
步骤4:将文章Wiki标记解析为XML
查找-键入f|grep'\.txt$'>fr.files
java-jar sleep.jar到8.sl fr.files
cat>启动.sh ./files0.sh文件& ./文件1.sh& ./files2.sh文件& ... ./files15.sh文件& ^D类
./启动.sh
java-jar sleep.jar watchthem.sl
第5步:从文章中提取纯文本
./wikiextract.py out法语_plaintext.txt
第6步(可选):将纯文本拆分为多个文件以便于处理
mkdir语料库 java-jar sleep.jar makecorpus.sl法语plaintext.txt语料库