Pythonで文が有効かどうかを確認するには?
例:
I love Stackoverflow - Correct
I Stackoverflow love - Incorrect
自動校正と文法チェックを提供するさまざまな Web サービスがあります。クエリを簡素化するための Python ライブラリを備えているものもあります。
私が知る限り、これらのツールのほとんど (確かに After the Deadline と LanguageTool) はルール ベースです。チェックされたテキストは、一般的なエラーを説明する多数の規則と比較されます。ルールが一致する場合、ソフトウェアはそれをエラーと呼びます。ルールが一致しない場合、ソフトウェアは何もしません (ルールがないエラーは検出できません)。
import ATD
ATD.setDefaultKey("your API key")
errors = ATD.checkDocument("Looking too the water. Fixing your writing typoss.")
for error in errors:
print "%s error for: %s **%s**" % (error.type, error.precontext, error.string)
print "some suggestions: %s" % (", ".join(error.suggestions),)
期待される出力:
grammar error for: Looking **too the**
some suggestions: to the
spelling error for: writing **typoss**
some suggestions: typos
自分のマシンでサーバー アプリケーションを実行することは可能です。4 GB の RAM を推奨します。
https://pypi.python.org/pypi/language-check
>>> import language_check
>>> tool = language_check.LanguageTool('en-US')
>>> text = 'A sentence with a error in the Hitchhiker’s Guide tot he Galaxy'
>>> matches = tool.check(text)
>>> matches[0].fromy, matches[0].fromx
(0, 16)
>>> matches[0].ruleId, matches[0].replacements
('EN_A_VS_AN', ['an'])
>>> matches[1].fromy, matches[1].fromx
(0, 50)
>>> matches[1].ruleId, matches[1].replacements
('TOT_HE', ['to the'])
>>> print(matches[1])
Line 1, column 51, Rule ID: TOT_HE[1]
Message: Did you mean 'to the'?
Suggestion: to the
...
>>> language_check.correct(text, matches)
'A sentence with an error in the Hitchhiker’s Guide to the Galaxy'
サーバー側を非公開で実行することも可能です。
さらに、これは Ginger 用のハッキー (スクリーン スクレイピング) ライブラリであり、おそらく最も洗練された無料で使用できる文法チェック オプションの 1 つです。
Microsoft Word のスクリプトを作成し、その文法チェック機能を使用できるようにする必要があります。
Open Office Web サイト には、文法チェッカーの精選されたリストがあります。Patrick のコメントに記載されています。
NLTKをチェックしてください。文を解析するために使用できる文法がサポートされています。文法を定義するか、提供されている文法を文脈自由パーサーと共に使用することができます。文が解析された場合、その文は有効な文法を持っています。そうでない場合は、そうではありません。これらの文法は、最も広い範囲をカバーしていない可能性があります (たとえば、StackOverflow のような単語の処理方法がわからない可能性があります) が、このアプローチにより、文法で何が有効で何が無効であるかを明確に示すことができます。 NLTK ブックの第 8 章では、解析について説明しており、知っておくべきことを説明する必要があります。
別の方法として、Python インターフェースを広範囲のパーサー (スタンフォード パーサーやC&Cなど) に書き込むこともできます。これらは、すべての単語やすべての文法構造を見たことがなくても、文を理解できる統計パーサーです。欠点は、パーサーが統計を使用して可能な限り最良の推測を行うため、文法が正しくない文の解析を返す場合があることです。
したがって、それは本当にあなたの目標が何であるかに依存します. 文法と見なされるものを非常に正確に制御したい場合は、NLTK でコンテキストフリー パーサーを使用します。堅牢性と広いカバレッジが必要な場合は、統計パーサーを使用してください。
language-tool-pythonをお勧めします。例えば:
import language_tool_python
tool = language_tool_python.LanguageTool('en-US')
text = "Your the best but their are allso good !"
matches = tool.check(text)
len(matches)
そして、次のようになります。
4
見つかった 4 つの問題を確認できます。
第 1 号:
matches[0]
そして、次のようになります。
Match({'ruleId': 'YOUR_YOU_RE', 'message': 'Did you mean "You\'re"?', 'replacements': ["You're"], 'context': 'Your the best but their are allso good !', 'offset': 0, 'errorLength': 4, 'category': 'TYPOS', 'ruleIssueType': 'misspelling'})
第 2 号:
matches[1]
そして、次のようになります。
Match({'ruleId': 'THEIR_IS', 'message': 'Did you mean "there"?', 'replacements': ['there'], 'context': 'Your the best but their are allso good !', 'offset': 18, 'errorLength': 5, 'category': 'CONFUSED_WORDS', 'ruleIssueType': 'misspelling'})
3番目の問題:
matches[2]
そして、次のようになります:
Match({'ruleId': 'MORFOLOGIK_RULE_EN_US', 'message': 'Possible spelling mistake found.', 'replacements': ['also', 'all so'], 'context': 'Your the best but their are allso good !', 'offset': 28, 'errorLength': 5, 'category': 'TYPOS', 'ruleIssueType': 'misspelling'})
第 4 号:
matches[3]
そして、次のようになります。
Match({'ruleId': 'WHITESPACE_RULE', 'message': 'Possible typo: you repeated a whitespace', 'replacements': [' '], 'context': 'Your the best but their are allso good!', 'offset': 33, 'errorLength': 2, 'category': 'TYPOGRAPHY', 'ruleIssueType': 'whitespace'})
より詳細な例を探している場合は、Predictive Hacksの関連記事を参照してください。