如何检查句子在Python中是否有效?
示例:
I love Stackoverflow - Correct
I Stackoverflow love - Incorrect
答案 0 :(得分:30)
有各种Web服务提供自动校对和语法检查。有些人有一个Python库来简化查询。
据我所知,大多数这些工具(当然在截止日期和语言工具之后)都是基于规则的。将检查的文本与描述常见错误的大量规则进行比较。如果规则匹配,则软件将其称为错误。如果规则不匹配,则软件不执行任何操作(它无法检测到没有规则的错误)。
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'
也可以私下运行服务器端。
此外,this是Ginger的hacky(屏幕抓取)库,可以说是最优秀的免费语法检查选项之一。
应该可以编写Microsoft Word脚本并使用其语法检查功能。
有一个curated list of grammar checkers on Open Office website。帕特里克在评论中注意到。
答案 1 :(得分:20)
结帐NLTK。他们支持您可以用来解析句子的语法。您可以定义语法,或使用提供的语法以及无上下文解析器。如果句子解析,则它具有有效的语法;如果没有,那就没有。这些语法可能没有最广泛的覆盖范围(例如,它可能不知道如何处理像StackOverflow这样的单词),但是这种方法将允许您具体说明语法中的有效或无效。 NLTK书的Chapter 8涵盖了解析,并应解释您需要了解的内容。
另一种方法是将python接口写入广泛的解析器(如Stanford parser或C&C)。这些是统计解析器,即使他们之前没有看到所有单词或所有语法结构,也能够理解句子。缺点是有时解析器仍然会返回语法错误的句子的解析,因为它会使用统计数据来做出最佳猜测。
所以,这实际上取决于你的目标是什么。如果您想要非常精确地控制被认为是语法的内容,请使用带有NLTK的无上下文解析器。如果您需要稳健性和广泛覆盖,请使用统计解析器。
答案 2 :(得分:0)
我建议使用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个问题:
第一期:
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'})
第二期:
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'})
第三期:
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'})
第四期:
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的相关文章