3 votes

Transformation de l'anglais du début de l'ère moderne en orthographe du 20e siècle à l'aide du NLTK

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.

6voto

Studer Points 360

ethrema() n'est pas une méthode du type str vous devez utiliser les éléments suivants :

eth1 = [ethrema(w) for w in text]
#AND
eth2 = [ethremb(w) for w in text]

EDIT (pour répondre au commentaire) :

ethremb(ethrema(word)) ne fonctionnerait pas tant que vous n'auriez pas fait quelques petits changements dans vos fonctions :

def ethrema(word):
    if word.endswith('th'):
        return word[:-2] + 's'
    else
        return word

def ethremb(word):
    if word.endswith('es'):
        return word[:-2] + 's'
    else
        return word

#OR

def ethrema(word):
    if word.endswith('th'):
        return word[:-2] + 's'
    elif word.endswith('es'):
        return word[:-2] + 's'
    else
        return word

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X