web-dev-qa-db-fra.com

Comment vérifier si une phrase est correcte (simple vérification grammaticale en Python)?

Comment vérifier si une phrase est valide en Python?

Exemples:

I love Stackoverflow - Correct
I Stackoverflow love - Incorrect
41
ChamingaD

Découvrez NLTK . Ils prennent en charge les grammaires que vous pouvez utiliser pour analyser votre phrase. Vous pouvez définir une grammaire, ou utiliser celle qui est fournie, avec un analyseur sans contexte. Si la phrase est analysée, alors elle a une grammaire valide; sinon, ce n'est pas le cas. Ces grammaires peuvent ne pas avoir la couverture la plus large (par exemple, elles peuvent ne pas savoir comment gérer un mot comme StackOverflow), mais cette approche vous permettra de dire spécifiquement ce qui est valide ou invalide dans la grammaire. Chapitre 8 du livre NLTK couvre l'analyse et devrait expliquer ce que vous devez savoir.

Une alternative serait d'écrire une interface python pour un analyseur à large couverture (comme le analyseur Stanford ou C&C ). Ce sont des statistiques des analyseurs qui seront capables de comprendre des phrases même s'ils n'ont pas vu tous les mots ou toutes les constructions grammaticales auparavant. L'inconvénient est que parfois l'analyseur retournera toujours une analyse pour une phrase avec une mauvaise grammaire car il utilisera les statistiques pour faire la meilleure estimation possible.

Donc, cela dépend vraiment de votre objectif. Si vous voulez un contrôle très précis sur ce qui est considéré comme grammatical, utilisez un analyseur sans contexte avec NLTK. Si vous voulez de la robustesse et une large couverture, utilisez un analyseur statistique.

21
dhg

Il existe différents services Web fournissant une relecture et une vérification grammaticales automatisées. Certains ont une bibliothèque Python pour simplifier les requêtes.

Pour autant que je sache, la plupart de ces outils (certainement After the Deadline et LanguageTool) sont basés sur des règles. Le texte vérifié est comparé à un grand ensemble de règles décrivant les erreurs courantes. Si une règle correspond, le logiciel l'appelle une erreur. Si une règle ne correspond pas, le logiciel ne fait rien (il ne peut pas détecter les erreurs pour lesquelles il n'a pas de règles).

Après la date limite

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),)

Production attendue:

grammar error for: Looking **too the**
some suggestions: to the
spelling error for: writing **typoss**
some suggestions: typos

Il est possible d'exécuter l'application serveur sur votre propre machine, 4 Go RAM est recommandé.

LanguageTool

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'

Il est également possible d'exécuter le côté serveur en privé.

Gingembre

De plus, this est une bibliothèque hacky (grattage d'écran) pour Ginger, sans doute l'une des options de vérification de grammaire gratuites les plus raffinées.

Microsoft Word

Il devrait être possible de scripter Microsoft Word et d'utiliser sa fonctionnalité de vérification de la grammaire.

Plus

Il y a une liste organisée des vérificateurs de grammaire sur le site Web d'Open Office . Noté dans les commentaires de Patrick.

31
user7610