我正在寻找一种相对快速的方法,可以使用gem或API来检查单词是否拼写错误。
我尝试使用几种 gem -raspell,ffi-aspell,hunspell-ffi,spell_cheker和spellchecker-每个都有不同的错误。
我对ruby还是很陌生,希望找到一个简单的解决方案(我正在处理许多短文本文件,并希望计算拼写错误的单词所占的百分比),而该解决方案不包括从头开始构建某些内容。
尝试使用ffi-aspell时,出现以下错误:
/Users/ntaylorthompson/.rvm/gems/ruby-1.9.2-p320/gems/ffi-aspell-0.0.3/lib/ffi/aspell/speller.rb:121: [BUG] Segmentation fault
ruby 1.9.2p320 (2012-04-20 revision 35421) [x86_64-darwin11.4.0]
-- control frame ----------
c:0005 p:---- s:0019 b:0019 l:000018 d:000018 CFUNC :speller_check
c:0004 p:0113 s:0013 b:0013 l:000012 d:000012 METHOD /Users/ntaylorthompson/.rvm/gems/ruby-1.9.2-p320/gems/ffi-aspell-0.0.3/lib/ffi/aspell/speller.rb:121
c:0003 p:0049 s:0007 b:0007 l:0005a8 d:0005d0 EVAL ffi-aspell_test.rb:5
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH
c:0001 p:0000 s:0002 b:0002 l:0005a8 d:0005a8 TOP
---------------------------
-- Ruby level backtrace information ----------------------------------------
ffi-aspell_test.rb:5:in `<main>'
/Users/ntaylorthompson/.rvm/gems/ruby-1.9.2-p320/gems/ffi-aspell-0.0.3/lib/ffi/aspell/speller.rb:121:in `correct?'
/Users/ntaylorthompson/.rvm/gems/ruby-1.9.2-p320/gems/ffi-aspell-0.0.3/lib/ffi/aspell/speller.rb:121:in `speller_check'
-- C level backtrace information -------------------------------------------
[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html
Abort trap: 6
我将不胜感激(1)建议上述方法之外的另一种方法,或(2)建议使用上述5种 gem 的方法-因此,我至少可以花时间调试最佳选择。
最佳答案
raspell不再被维护,因此如果您有libaspell header 可用,则ffi-aspell是一个不错的选择。
如果无法使这些库正常工作,则可以将其 shell 化为aspell
二进制文件。下面的方法可以做到这一点(包括单元测试):
# Returns the percentage of incorrect words per document
#
def spellcheck(filename)
fail "File #{filename} does not exist" unless File.exists?(filename)
words = Float(`wc -w #{filename}`.split.first)
wrong = Float(`cat #{filename} | aspell --list | wc -l`.split.first)
wrong / words
end
if $0 == __FILE__
require 'minitest/autorun'
require 'tempfile'
describe :spellcheck do
def write(str)
@file.write str
@file.read
end
before do
@file = Tempfile.new('document')
end
it 'fails when given a bad path' do
-> { spellcheck('/tmp/does/not/exist') }.must_raise RuntimeError
end
it 'returns 0.0 if there are no misspellings' do
write 'The quick brown fox'
spellcheck(@file.path).must_equal 0.0
end
it 'returns 0.5 if 2/4 words are misspelled' do
write 'jumped over da lacie'
spellcheck(@file.path).must_be_close_to 0.5, 1e-8
end
it 'returns 1.0 if everything is misspelled' do
write 'Da quyck bown foxx jmped oer da lassy dogg'
spellcheck(@file.path).must_equal 1.0, 1e-8
end
after do
@file.close
@file.unlink
end
end
end
spellcheck()
假设您的路径上有cat
,wc
和aspell
,并且默认字典就是您要使用的字典。单元测试仅适用于Ruby 1.9-如果您运行的是1.8,则将其删除。关于ruby - ruby 中简单的拼写检查方法/ gem ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11356249/