我正在尝试编写一个拼写检查模块.
它加载一个文本,从16 mb文件创建一个字典,然后检查遇到的单词是否与字典中的单词相似(类似=最多两个字符),如果是,则将其从字典更改为表单.
现在我正在使用Levenshtein距离算法,处理50个字的设置需要3分钟......
我很确定必须有更快的解决方案.Profiler告诉我,我的应用程序花费了超过80%的时间在Levenshtein Distance功能.
有没有更好的解决方案/算法?
这是我使用的算法版本的实现:
def levenshteinDistance(s1, s2):
l_s1 = len(s1)
l_s2 = len(s2)
d = [[a for a in genM(x, l_s2 + 1)] for x in xrange(l_s1 + 1)]
for i in xrange(1, l_s1 + 1):
for j in xrange(1, l_s2 + 1):
d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + decide_of_equality(s1[i - 1],s2[j - 1]))
return d[l_s1][l_s2]
Run Code Online (Sandbox Code Playgroud) 我在运行Lion的MacbookPro上安装pyenchant时遇到了麻烦.我用自制软件和点子来安装附魔和诡计
自制软件安装附魔
pip install pyenchant
我还下载了一个英文字典到以下文件夹:
/usr/local/Cellar/python/2.7.3/lib/python2.7/site-packages/enchant/share/enchant/myspell
-rw-r--r-- 1 mycomputer admin 75 Jun 6 13:34 README.txt
-rw-rw-rw-@ 1 mycomputer staff 1017 May 4 2007 README_en_US.txt
drwx------@ 2 mycomputer staff 68 Jun 6 13:38 en_US
-rw-rw-rw-@ 1 mycomputer staff 3045 May 4 2007 en_US.aff
-rw-rw-rw-@ 1 mycomputer staff 696131 May 4 2007 en_US.dic
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用附魔时,我收到以下错误.
>>> import enchant
>>> d = enchant.Dict('en_US')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/Cellar/python/2.7.3/lib/python2.7/site-packages/enchant/__init__.py", line 502, in __init__
self._switch_this(broker._request_dict_data(tag),broker)
File "/usr/local/Cellar/python/2.7.3/lib/python2.7/site-packages/enchant/__init__.py", …
Run Code Online (Sandbox Code Playgroud) import enchant
import wx
from enchant.checker import SpellChecker
from enchant.checker.wxSpellCheckerDialog import wxSpellCheckerDialog
from enchant.checker.CmdLineChecker import CmdLineChecker
a = "Ceci est un text avec beuacuop d'ereurs et pas snychro"
chkr = enchant.checker.SpellChecker("fr_FR")
chkr.set_text(a)
cmdln = CmdLineChecker()
cmdln.set_checker(chkr)
b = cmdln.run()
c = chkr.get_text() # returns corrected text
print c
Run Code Online (Sandbox Code Playgroud)
如何在c
不使用0
手动的情况下返回更正的文本cmdlinechecker
?
程序应该运行包含未修正文本的字符串,更正它,并将其保存在变量中以导出到MySQL数据库中.
我正在使用pyenchant软件包在Python中进行拼写检查。我能够成功使用英语,法语,德语语言进行操作。
另外,我想使用意大利语和西班牙语。我研究了附魔使用中可用的字典enchant.list_languages()
,但我只得到了['de_DE', 'en_AU', 'en_GB', 'en_US', 'fr_FR']
。
我正在寻找如何使用附魔包装或任何其他包装/技术对意大利语和西班牙语进行拼写检查。
谢谢。
附魔图书馆的不同结果(附魔1.6.6)
在MAC OSX 10.11.12(El Capitan)中:
>>> import enchant
>>> d = enchant.Dict("en_US")
>>> d.suggest("prfomnc")
['performance', 'prominence', 'preform', 'perform']
Run Code Online (Sandbox Code Playgroud)
在Linux Ubuntu 14.04 LTS中:
>>> import enchant
>>> d = enchant.Dict("en_US")
>>> d.suggest("prfomnc")
['princedom', 'preferment', 'preform']
Run Code Online (Sandbox Code Playgroud)
任何想法为什么我在NLTK中获得"建议"功能的不同结果和其他替代方案?
苹果系统
>>> enchant.list_dicts()
[('de_DE', <Enchant: Myspell Provider>), ('en_AU', <Enchant: Myspell Provider>), ('en_GB', <Enchant: Myspell Provider>), ('en_US', <Enchant: Myspell Provider>), ('fr_FR', <Enchant: Myspell Provider>)]
Run Code Online (Sandbox Code Playgroud)
Ubuntu的
>>> enchant.list_dicts()
[('en', <Enchant: Aspell Provider>), ('en_CA', <Enchant: Aspell Provider>), ('en_GB', <Enchant: Aspell Provider>), ('en_US', <Enchant: Aspell Provider>), ('en_ZA', <Enchant: Myspell …
Run Code Online (Sandbox Code Playgroud) hunspell
我已经使用类型
.dic
和文件加载了一本非英语词典.aff
。我可以使用以下方法检查字典中的单词
d=enchant.Dict('my_lang')
d.check('my_word')
Run Code Online (Sandbox Code Playgroud)
该.dic
文件包含所有基本形式,并且. aff
文件包含所有词缀。我需要的是找到输入单词的基本形式。enchant.dict
如果我可以打印出所有对象内容或在.dic
文件中取出一个单词并使用所有词缀来制作新单词列表,那么会有帮助。这是可能的还是我必须自己编写词缀规则?如果该check()
函数已经做到了这一点,为什么它如此隐藏?
我安装了pyenchant(Ubuntu 17.0,Spyder 3.2.4,Python 3.6.1 64bits)使用
pip install pyenchant
Run Code Online (Sandbox Code Playgroud)
当我执行
import enchant
b = enchant.Broker()
print(b.describe())
Run Code Online (Sandbox Code Playgroud)
我正进入(状态
[<Enchant: Hspell Provider>]
Run Code Online (Sandbox Code Playgroud)
我能够发现输出应该至少包含
[<Enchant: Ispell Provider>, <Enchant: Myspell Provider>, <Enchant: Aspell Provider>]
Run Code Online (Sandbox Code Playgroud)
无论出于何种原因,我的 pyenchant 创建了列表中只有一个希伯来语 (hspell) 提供程序的代理。我想使用“us_EN”字典,但可用字典的列表是 [] 如果我没有安装 hspell,或者在我安装 hspell 后是 ['he']。我的系统中确实安装了 aspell,我进行了三重检查。任何帮助将不胜感激。
感谢Stackoverflow,我了解了pyenchant库。
我正在寻找通过附魔使用的德语词典“ de_DE”,但找不到。我在哪里可以得到它,应该将它放在哪个目录中以便pyenchant可以看到它?
我正在使用运行Ubuntu的Linux机器。
我为PyEnchant提供了许多语言的文件:en_US, en_AU, de_DE, fr_FR
.现在我调用字典列表,只看到小集:'en', 'en_US', 'en_GB', 'en_CA'
.我打电话:
items = enchant._broker.list_languages()
Run Code Online (Sandbox Code Playgroud)
如何加载Enchant其他langs?新文件?所以enchant.Dict()
可以接受它.
我试图为附魔库(pyenchant)安装python绑定,根据自述文件,它应该像运行一样简单python setup.py install
但是当我尝试时,我得到这个错误:
OSError: [Errno 2] No such file or directory: './tools/pyenchant-bdist-osx-sources/build/lib'
Run Code Online (Sandbox Code Playgroud)
谁能告诉我该怎么做?我试过谷歌,但没有运气.
PS:我在serverfault上有同样的问题,因为我认为这是最适合它的地方,但是在那里几乎没有帮助,我现在正在这里尝试.
我正在尝试运行该命令d = enchant.Dict('en_US')
但收到错误消息"enchant.errors.DictNotFoundError: Dictionary for language 'en_US' could not be found"
我运行命令sudo yum install aspell -en
并尝试设置param路径"enchant.set_param("enchant.aspell.dictionary.path","/usr/lib64/aspell-0.60")"
无济于事.
有什么建议?
我在运行导入附魔库的 python 文件时遇到问题。我已经使用以下命令安装了 enchant 模块:
$ pip install -U pyenchant
> Requirement already up-to-date: pyenchant in /usr/lib/python3.4/site-packages
Run Code Online (Sandbox Code Playgroud)
$ cat /etc/*-release
CentOS Linux release 7.2.1511 (Core)
$ cat ~/.zshrc
...
export PYTHONPATH=/usr/lib/python3.4/site-packages
alias py="python3"
alias pip="pip3"
...
$ py --version
Python 3.4.3
$ pip --version
pip 8.1.1 from /usr/lib/python3.4/site-packages (python 3.4)
$ echo $PYTHONPATH
/usr/lib/python3.4/site-packages
$ ls -al /usr/lib/python3.4/site-packages | grep enchant
drwxr-xr-x 5 root root 4096 13 apr 13:56 enchant
drwxr-xr-x 2 root root 4096 13 …
Run Code Online (Sandbox Code Playgroud) 我希望在我的PyQt4
项目中有一个拼写检查功能,看起来pyenchant是做这件事的好选择.这是完美的工作.但我想制作自己的单词词典并用它们提供模块.有可能吗?
之后,如何在其他想要使用原始程序的计算机上轻松地使用这个新词典呢?我不想让用户安装一些奇怪的程序和字典来使用我的简单程序.
PS:我在Linux系统上.
pyenchant ×13
python ×11
python-2.7 ×3
dictionary ×2
enchant ×2
python-3.x ×2
amazon-ec2 ×1
aspell ×1
install ×1
macos ×1
nltk ×1
pip ×1
ubuntu ×1
windows-7 ×1