I'm working on a program that aim to take sentences (currently in french) and compact them to a length of 38 characters while retaining as much information as possible.
You can find another part of this project here Remove determiners in a string
You can also find a follow up for this question here: Replacing words with their abbreviations - Follow up
This particular function's goal is to replace words with their abbreviations by compairing each word with all of those in the config file and replacing whenever a match is found, the goal is to keep a géneral idea of what the string meant so its not a problem that a word once replaced could ressemble an other as long as they refer to roughly the same thing.
String is always upper case and free of special characters.
Here is how I do it:
def shorten_words(abbreviations, string): # abbreviations is a file parsed with configparser for key in abbreviations: # finds beginning of possible words it_string = 0 while it_string < len(string) and len(string) > 38: if string[it_string] == ' ' or it_string == 0: if it_string == 0: it_string = -1 # finds end of possible words it_word = 0 while(it_word < len(key) and it_string + it_word + 1 < len(string) and string[it_string + it_word + 1] == key[it_word].upper()): it_word += 1 # cuts the line if(it_word == len(key) and (it_string + it_word + 1 == len(string) or string[it_string + it_word + 1] == ' ')): string = string[:it_string + 1] + abbreviations[key].upper() + string[it_string + it_word + 1:] # cuts the line for the same word with an 'S' at the end elif(it_word == len(key) and (string[it_string + it_word + 1] == 'S' and (it_string + it_word + 2 == len(string) or string[it_string + it_word + 2] == ' '))): it_word += 1 string = string[:it_string + 1] + abbreviations[key].upper() + string[it_string + it_word + 1:] it_string += 1 if(it_string == 0): it_string = 1 return(string)
here is a sample of the configfile (if key and value are equal the line is made to remove plural):
[abbreviation] AVANCEE = AVANC COMPOSANT = COMPO VERT = VERT AGRAIRE = AGRAIR MECANIQUE = MECA CARROSSERIE = CARROS SIGNALISATION = SIGNAL FOURNITURE = FOURNI LAITIERE = LAIT INTERPROFESSIONNEL = INTRPRO ATLANTIQUE = ATLAN REALISATION = REAL INCENDIE = INCEND MARBRERIE = MARB FUNEBRE = FUNEBR POMPE = POMPE ANTICIPATION = ANTICIP OBJET = OBJET ANTIQUITE = ANTIQ MOBILITE = MOBIL ASSOCIATIF = ASSO ANCIENNE = ANC TELECOMMUNICATION = TELECOM RESEAUX = RESEAU LOCALE = LOCAL RESPIRE = RESPI QUAND = QND CHRETIENNE = CHRET OUVRIERE = OUVRI JEUNESSE = JEUNE INTERCULTUREL = INTRCULT VALORISATION = VALOR ALIMENTAIRE = ALIMEN COMMUNALE = COMMUNE LAIQUE = LAIQ CASSATION = CASS TRAVAUX = TRAVAU ONCOLOGIE = ONCO RELIGION = RELIG PLURALISME = PLURAL FLOTTANTE = FLOT EOLIENNE = EOLIEN HUMAINE = HUMAIN POTENTIEL = POTENT AMELIORATION = AMELIO MUSIQUE = MUSIQ MUNICIPALE = MUNI EVANGELIQUE = EVANG BIOLOGISTE = BIOLOG REPUBLICAIN = REPU SYMPATHISANT = SYMPAT ELU = ELU INTERCONNEXION = INTRCONN CONSULTANT = CONSULT ORGANIZATION = ORGA OLYMPIQUE = OLYMP CAPACITE = CAPA RENFORCEMENT = RENFOR CLEF = CLEF FRIGORIFIQUE = FRIGO ENTREPOSAGE = ENTREPO COLLABORATIF = COLLAB TROUBLE = TROUBL ENTRAIDE = ENTRAID REPRESENTANT = REPRESENT ADHERENT = ADHER FOLKLORIQUE = FOLKLO STADE = STAD AMI = AMI EMPEREURS = EMPER CONFRERIE = CONFRER SOUTENUE = SOUTENU LISTE = LIST ELECTION = ELECT ELECTORALE = ELECT FINANCEMENT = FINANC CATHOLIQUE = CATHO HARMONIE = HARMO DEBOUT = DEBOU VENT = VENT CERCLE = CERCL FOOTBALL = FOOT IMPROVISATION = IMPROV POPULAIRE = POPU SECOURS = SECOUR ART = ART DRAMATURGIE = DRAMA POETIQUE = POET TRAVAILLANT = TRAVAIL SYNCHRONISEE = SYNCHRO NATATION = NATA LOCATAIRES = LOCAT AMICALE = AMICA DEPARTEMENT = DEPART INDISCIPLINEE = INDISCIPL PARTAGE = PARTA MEDIATION = MEDIAT CITOYEN = CITOY CULTIVONS = CULTIV QUARTIER = QUART DOMICILE = DOMI ADMINIS = ADMIN APPLIQUEE = APPLI SOPHROLOGIE = SOPHRO SPECTACLE = SPECTA ABANDONNE = ABANDON COMMUNAUTAIRE = COMMUN PARTICULIER = PARTICUL METALLIQUE = METAL COOPERATION = COOP PROGRAMMATION = PROGRAM KINESITHERAPEUTE = KINESITHERAP ENVIRON = ENVIRON ARTISAN = ARTIS COMMUNICATION = COM TRANSMISSION = TRANSMIS APPROVISIONNEMENT = APPRO IMAGERIE = IMAGE MANAGEMENT = MANAG ASSOCIEE = ASSO INFIRMIERE = INFIRM FONDS = FOND EMBOUTISSAGE = EMBOUTISS DECOUPAGE = DECOUP OUTILLAGE = OUTIL TERRASSEMENT = TERRASS DEMOLITION = DEMOLIT BILINGUE = BILINGU ECOLE = ECOL HABITAT = HABITA PRODUCTION = PROD DURABLE = DURABL PRATIQUE = PRATIQ TRANSPORT = TRANSPOR ASSOCIATIVE = ASSO CRECHE = CRECH SPECIALISEE = SPECIAL COUVERTURE = COUVERT ETANCHEITE = ETANCH TOITURE = TOIT