J'ai une liste de chaînes de caractères qui sont tous des mots anglais du début de l'ère moderne se terminant par "th". Il s'agit notamment de hath, appointeth, demandeth, etc. -- ils sont tous conjugués à la troisième personne du singulier.
Dans le cadre d'un projet plus vaste (utiliser mon ordinateur pour convertir le texte Gutenberg de Gargantua et Pantagruel en quelque chose qui ressemble plus à l'anglais du 20ème siècle, afin de pouvoir le lire plus facilement), je veux enlever les deux ou trois derniers caractères de tous ces mots et les remplacer par un 's', puis utiliser une fonction légèrement modifiée sur les mots qui n'ont pas encore été modernisés, tous deux inclus ci-dessous.
Mon principal problème est que je n'arrive jamais à taper correctement en Python. Je trouve cette partie du langage vraiment déroutante à ce stade.
Voici la fonction qui supprime les "th" :
from __future__ import division
import nltk, re, pprint
def ethrema(word):
if word.endswith('th'):
return word[:-2] + 's'
Voici la fonction qui supprime les e superflus :
def ethremb(word):
if word.endswith('es'):
return word[:-2] + 's'
Ainsi, les mots "abat" et "accuse" passeraient par ethrema mais pas par ethremb(ethrema), tandis que le mot "abhorre" devrait passer par les deux.
Si quelqu'un peut penser à un moyen plus efficace de faire cela, je suis tout ouïe.
Voici le résultat de ma tentative très amateur d'utiliser ces fonctions sur une liste tokenisée de mots à moderniser :
>>> eth1 = [w.ethrema() for w in text]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'ethrema'
Donc, oui, c'est vraiment une question de typage. Ce sont les premières fonctions que j'ai écrites en Python, et je n'ai aucune idée de comment les appliquer à des objets réels.