58

Pythonで文が有効かどうかを確認するには?

例:

I love Stackoverflow - Correct
I Stackoverflow love - Incorrect
4

4 に答える 4

47

自動校正と文法チェックを提供するさまざまな 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 のコメントに記載されています。

于 2014-08-05T15:22:37.197 に答える
24

NLTKをチェックしてください。文を解析するために使用できる文法がサポートされています。文法を定義するか、提供されている文法を文脈自由パーサーと共に使用することができます。文が解析された場合、その文は有効な文法を持っています。そうでない場合は、そうではありません。これらの文法は、最も広い範囲をカバーしていない可能性があります (たとえば、StackOverflow のような単語の処理方法がわからない可能性があります) が、このアプローチにより、文法で何が有効で何が無効であるかを明確に示すことができます。 NLTK ブックの第 8 章では、解析について説明しており、知っておくべきことを説明する必要があります。

別の方法として、Python インターフェースを広範囲のパーサー (スタンフォード パーサーC&Cなど) に書き込むこともできます。これらは、すべての単語やすべての文法構造を見たことがなくても、文を理解できる統計パーサーです。欠点は、パーサーが統計を使用して可能な限り最良の推測を行うため、文法が正しくない文の解析を返す場合があることです。

したがって、それは本当にあなたの目標が何であるかに依存します. 文法と見なされるものを非常に正確に制御したい場合は、NLTK でコンテキストフリー パーサーを使用します。堅牢性と広いカバレッジが必要な場合は、統計パーサーを使用してください。

于 2012-04-20T19:34:56.393 に答える
5

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の関連記事を参照してください。

于 2020-10-12T08:44:53.350 に答える