Transformer l'anglais moderne tôt dans l'orthographe du 20ème siècle avec la NLTK

StackOverflow https://stackoverflow.com/questions/3591673

  •  01-10-2019
  •  | 
  •  

Question

J'ai une liste de chaînes qui sont tous les mots anglais début modernes se terminant par « e ». Ceux-ci comprennent hath, appointeth, demandeth, etc. -. Ils sont tous conjugués au singulier troisième personne

Dans le cadre d'un projet beaucoup plus important (en utilisant mon ordinateur pour convertir le Gutenberg de etext Gargantua et Pantagruel en quelque chose de plus comme 20e siècle anglais, de sorte que je serai en mesure de le lire plus facilement) Je veux supprimer le dernier deux ou trois personnages de tous ces mots et de les remplacer par un « s », alors utiliser une fonction légèrement modifiée sur les mots qui ne sont toujours pas modernisés, tous deux inclus ci-dessous.

Mon principal problème est que je parviens tout simplement jamais obtenir ma frappe en plein Python. Je trouve cette partie de la langue vraiment déroutant à ce stade.

Voici la fonction qui est: Enlève e

from __future__ import division
import nltk, re, pprint

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

Voici la fonction de qui supprime étrangers e:

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

d'où les mots « abateth » et « accuseth » passerait par ethrema mais pas par ethremb (ethrema), alors que le mot « abhorre » aurait besoin de passer par les deux.

Si quelqu'un peut penser à une façon de faire plus efficace, je suis tout ouïe.

Voici le résultat de ma tentative très amateur d'utiliser ces fonctions sur une liste de mots qui sous forme de jeton besoin d'être modernisés:

>>> 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'

Alors, oui, il est vraiment une question de frappe. Ce sont les premières fonctions que j'ai jamais écrit en Python, et je ne sais pas comment les appliquer à des objets réels.

Était-ce utile?

La solution

ethrema() est pas une méthode de 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 (aux commentaires de réponse):

ethremb(ethrema(word)) ne travaillerait jusqu'à ce que vous avez fait quelques petits changements à 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top