import re # Step 1 Read the file #input_file = 'deu_mixed-typical_2011_10K-words.txt' input_file = 'deu_mixed-typical_2011_1M-words.txt' with open(input_file, encoding='utf8') as f: lines = [re.sub('([0-9]+)\t|\t([0-9]+)\n', '', line) for line in f] # Step 2 Filter # either with list comprehension # filtered_lines = [el for el in lines if re.match(r'.*ff.*', el)] # or with a filter function # removeLigsPattern = r'(.*auffo.*|.*aufli.*)' # Don't suppress ligatures in these words noFalsePositives = re.compile(r"""( Lauffen| Stauffach| Stauffen| stauffen| Stauffer| stauffer| Stauffisch| stauffisch| chauffier| Chauffier| chauffeur| Chauffeur| chauffement| cheffekt| Scheffel| scheffel| cheffizi| cheff��| Hoffacker| Hoffart| Hoff��rt| Hoffricht| Hoffranz| tieffekt| tieffiziffahrtffallee| ffallerg| ffallokat| iffalt| offalt| Diffami| diffami| riffans| toffansffarbeit| toffeier| ffeindealerB��ffeld| b��ffeld| ffeldenk| Iffeld| L��ffeld| l��ffeld| M��ffeld| m��ffeld| n��ffeld| Riffeld| taffeld| toffeld| Tr��ffeld| tr��ffeld| Waffeld| waffeldffelleck| ffellinde| Muffell| muffell| ��ffell| taffell| toffell| ��ffell| Buffett| B��ffett| buffett| b��ffett| Buffetz| B��ffetz| affirm| Affirm| Affoltern| Suffrage| suffrage| toffrak| ffraum| ffraub| ffrausch| ffraup| toffreak| chiffrei| toffrei| uffreis| luffrei| iffreig| toffries| affront| Affront| iffund| toffund| iffuss| rtstraffern| ssstraffern| Briefing| ebriefing| Chefin| chefin| chefibel| chefiebe| chefigur| chefilm| chefili| chefirm| chefisch| Hofier| Laufig| Blaufi| laufilter| laufiedr| rumpfig| schafigu| chlafitt| Tarifier| tarifier| figelehrt| Delfinfo| Delfinhalt| raffinhalt| Delfinkont| auflair| aufl��che| aufliegl| aufl��ssig| baufl| Baufl| blaufl| Blaufl| fraufl| Fraufl| gaufl��te| graufl| Graufl| onauflo| onauflu| Moskaufl| Schauflieg| Schauflo��| schaufl����| Schauflug| Schaufl��g| schauflieg| schauflo��| schaufl����| schauflug| schaufl��g| Taufliege| achefl| ichefl| schefl| chefl��che| dorfliese| dorfl��g| thanflamm| hoflosk| eimpflanz| eimpfleg| timpfleg| kopflaster| kopfleg| kopflaum| Durufl| mbarufl| ruflagge| rufleisch| nsumpfl| isumpfl| ssumpfl| surfleck| surfl��g| surfl��ss| tiefl��che| atieflaute| atieflut| Topflagg| Topflitz| Topflor| rtopfli| topfl��ch| topfleg| topflop| topflug| topfl��g| Torflagge| Torfl��gel| Torflut| torfl��che| torflasch| torflieg| torflimm| torflitz| torfloss| torflott| torfluch| torflug| torfl��g| torfl��ss| torfluss| torflu��| tropflug| aflosk| rafloss| ampfl��ch| ampflanz| ampfleg| euflei��| eufleiss| siflage| ouflage| flandern| flandrisch| huffleb| nflehn| rflehn| Hoflehn| Kaltefleiter| Hoefler| Knoepffler| fflerhyth| flicht| Bempfling| Haflinge| fl��chte| flohnetz| ntflohn| lfloss| lflosk| gopflaum| iopflast| nopflaster| opflair| opflanz| pfloss| Breifl| breifl| Dreifl| dreifl| Freifl| freifl| eiereifl| reifl��ch| reiflagg| reiflamm| reiflasch| reiflies| reiflock| reifloh| reifl��he| reiflott| tafleck| taflege| weifleck| chwerfl| werflitz| araffind| raffinte| stoffiz| stoffig| omicheft[ceg]| elfterfolg| f��nfterfolg| F��nfterfolg| f��nftrang| F��nftrang| f��nftreich| F��nftreich| F��nftoper| F��nftrund| F��nft��on| f��nft��ltest| F��nft��ltest| Senftenberg| straftheit| ftagent| ftanzahl| ftanzeig| ftanzieh| ftanz��g| ftaristokr| ftassel| fteamt| nfteich| ifteich| fteilfr| fterminder| ftermitt| ftestation| ftestatist| ftextrakt| fthemm| ftiefigur| haftier| Muftier| stiftisch| ��nftisch| ftodem| ftopfer| aftr��ume| ��ftr��ume| riftr��ume| uftr��ume| ftresorp| ftrett| ftreturn| ftritter| Luftritt| nft��b| pftheit| tdurftr��| Werftr| werftr| Werftu| werftu| Duftas| duftas| Gruftas| gruftas| Luftas| luftas| uftassoz| tdurfta| Kafka| kafka| Piefke| piefkei| Safka| Potrafke| Sprafke| Shirafkan| Tirafkan| Selfkant| Rifkin| fjord| fj��r| ��safjar��arb��r| fjell| fjall| fj��ll| fj��ll| Prokofjew| Sufjan| Eefje| Astafjew )""", re.X) # Patterns that indicate incorrect ligatures incorrectLigatures = re.compile(r"""( #.*auffo.*| #.*aufli.*| #.*auffi.* Auff[aeiloruy������]| auff[aeiloruy������]| Brieff| brieff| Cheff| cheff[a��eio��ru��]| Dampff| dampff| Dorff[a��eilo��ru��]| dorff[a��eilo��ru��]| Hanff| hanff| Hoff[a��ilo��ru��]| Golff| golff| Hoffern| hoffern| Hoffest| Impff| Kampff[a��eo��ru��]| kampff[a��eo��ru��]| Kopff[a��eo��ru��]| kopff[a��eo��ru��]| Klopff| klopff| Pr��ff| pr��ff| Ruffach| ruffach| Rumpff| Schaffang| Schaffarm| Schaffels| Schilff| schilff| Senff| senffa| senffl| senfl[a��]| Sumpff| sumpff| Tariff| tariff| Tieff| tieff| chaffron| eiffest| ffabrik| ffacet| ffachl| ffachm| ff��ch| ffaden| ff��d| ff��hig| ffahn| ffahr| ff��hr| ffaktor| ffakult| ffall| ff��ll| ffalt| ff��lt| ffami| ffanat| ffans| ffanta| ffarb| ff��rb| ffaschi| ffassad| ff��ul| ffecht| ffeder| ffedr| ffehl| ffeier| ffeind[els]| ffeld| ffell| ffeile| ffenster| fferien| ffernseh| ffertig| ffestl| ffests| ffetisch| ffetus| ffett| ffetz| ffeud| ffeue| ffilet| ffindung| ffirm| ffolg| ffoli| ffolter| ffond| fforder| ff��rder| fforell| fform| ff��rm| fforsch| fforen| fforu| ffoto| ff��t| ffracht| ffrag| ffrak| ffrank| ffr��s| ffrau| ffreak| ffregat| ffrei| ffremd| ffreq| ffreu| ffrisch| ffried| ffries| ffrist| ffriseu| ffrisur| ffront| ffrosch| ffr��sch| ffrucht| ffr��cht| ffr��h| ffund| ff��hr| ffunk| ff��hl| ff��ll| ff��rst| ffu��| ffuss| ff����| ff��ss| ffutter| ff��tter| hoffan| hoffersch| hoffest| hoffete| lffach| offegen| pffach| pffern| pffest| pffels| pffont| pff��h| reiffern| rffan| rffeel| rffest| rffinn| rffleck| straffern| ��nff| wurff[a��eilo��ru��]| Aufi| aufinstr| aufirr| aufisst| Briefi| briefi| Chefi| chefi| Chefin[a-mo-z]| chefind| Dorfi| dorfi| Hofi| Kampfi| kampfi| Kaufi| kaufi| Laufi| laufi| r��fi| Rumpfi| rumpfi| chafi| chlafi| Strafi| strafi| Tarifi| tarifi| Tiefinn| tiefinn| fidee| fideol| fidentif| fidentit| fidol| fidyll| figel| fikone| fillus| fimman| fimmob| fimmun| fimp| findex| findikat| findiv| findiz| findust| finfekt| finfiz| finfo| finfra| finfus| fingenieur| finhab| finhalat| finhalt| finitia| finjekt| finkont| finnenaus| finnenohr| finnenfl| finnenl| finnenraum| finnenr��um| finnens| finner| finnig| finnov| finsass| finsekt| finsel| finserat| finsign| finspek| finsta| finstinkt| finstitu| finstrukt[io]| finstrum| finsuff| finszen| fintars| fintell| fintegr| fintens| finter| finton| fintrig| finvent| finvest| firis| fironi| firre| firru| fisolat| fisolie| fisoth| uffax| Aufl[aeiouy������]| aufl| baufl��sen| blaufloch| blauflog| Briefl| briefl| Chefl| chefl| Dampfl| dampfl| Dorfl| dorfl| F��nfl| f��nfl| Golfl| golfl| Hanfl| hanfl| Hofl| hofl| Huflatt| huflatt| Hufled| hufled| Impfl| impfla| impfle| impfl��cke| Kampfl| kampfl| Kopfl[��eio��u��y]| kopfl[��eio��u��y]| K��pfl[a��io��u��y]| k��pfl[a��io��u��y]| Pfeifl| pfeifl| Pfiffl| pfiffl| Pr��fl| pr��fl| Reliefl| reliefl| Rufl| rufl| Schafl| schafl| Schiefl| schiefl| Schilfl| schilfl| Schlafl| schlafl| Schleifl| schleifl| Schrumpfl| schrumpfl| Schweifl| schweifl| Senfl| Steifl| steifl| Strafl| strafl| Strumpfl| strumpfl| Sumpfl| sumpfl| Surfl| surfl| Tarifl| tarifl| Tiefl| tiefl| Topfl| topfl| rtopfleg| Torfl| torfl| Tropfl| tropfl| Wurfl| wurfl| W��rfl| w��rfl| alflede| aflied| aflos| afl��ck| ampfl[a��ou]| arflad| ��ufle| eufle| flaberer| flabor| flage| flagun| fl��hm| flaminat| flamp| fland| fl��nd| fl��ng| flapp| fl��rm| fflatter| flauf| fl��uf| flaun| fleb| alfleder| flehn| flehr| fleiden| flein| fleist| fleit| flekt��r| fler| fleut| flich| ��pflicht| flieb| flief| flift| flig| flila| flinde| fling| flini| flinse| flisch| flist| fliter| flizenz| flobby| fl��ch| fl��ff| flohn| fl��hn| flok| flord| fl��sch| fl��su| fluft| flung| flust| Gipfle| gipfle| chopfl| lflady| lflast| lflos| nflehm| oflad| ofl��d| ofl��ck| opfla| ��pfle| orflad| pflaut| pfleier| pflehm| pfleis| pfleu| pflid| pflied| pfloch| pflos| pfl��s| pflup| pflux| rfl��d| rfl��ck| rfluke| reifl| Reifl| Tafle| tafle| urflad| ��rfla| urfloch| ��rfloch| wafle| wefle| weifle| werfl| affind| ffibel| ffieb| ffigu| ffilm| ffilter| ffinal| ffinte| ffinanz| ffistel| ffixier| iffind| lffing| lffisch| nffing| pffi| reiffing| Stoffi| stoffi| ffinnen| cheffl[aiou]| Griffl| griffl| Offline| offline| Pfiffl| Scheffle| scheffle| Schiffl| schiffl| Stoffl| stoffl| afflu| fflamell| fflast| fflatsch| ffloch| fflos| ifflo| offlad| ��ffle| offlo| pufflack| taffle| ufflad| uffl��d| luffleck| ��fle| ��ffle| Auffl| auffl| eiffleck| ffl��ch| fflech| ffleisch| fflexib| fflies| fflimm| ffluch| ffl��ch| fflug| ffl��g| fflur| ffluss| ffl��s| fflut| iefflieg| iefflog| lfflach| mpffl| opffl| upffl| rfflad| rfflasch| wurfl| ft| Auft[a��hio��ru��y]| auft[a��hio��ru��y]| Brieft| brieft| Cheft| cheft[a-z]| Dorft| dorft| Elfte| elfte| F��nft[a��eo��ruy]| f��nft[a��eo��ruy]| Golft| golft[hiru��y]| Greift[eio]| Hanftau| Hoft[a��ehio��ru��y]| hoft[a��hio��ru��]| Huftra| Kopft[a��ehio��ru��y]| Laufte| Pr��ft[a��hio��ru��y]| pr��ft[a��hio��ru��]| Ruft[a��ehio��ru��y]| Schaftal| Schaftor| Schaftreib| schaftal| schaftor| schaftreib| Schlaft| schlaft[a��hio��ru��y]| Schilft[��ehiru��y]| schilft[hiru��y]| Senft[a��ehio��ruy]| Straft[a��hio��ru��y]| straft[a��hio��ru��y]| Sufft| Surft[��hi����y]| Tarift| tarift| Tieft| Torft| torft| Wurft| wurft| fft[a��hio��ru��y]| Abstreiftest| Ankauftest| H��rpr��ftest| H��pftest| Impftest| Kauftest| Klopftest| Kneiftest| Lichtschweiftest| R��ckruftest| Schnupftest| Sumpftest| Tropftest| Wettkampftest| tofftest| aftee| auftee| lauftest| eiftie| eiftit| eiftr| elieft| enftei| ftabell| ftablett| ftafel| ftag| ft��g| ftalsg| ftanz| ft��nz| ftari| ftarn| ftasse| ftatb| ftaten| ft��tig| ftauch| ftaugl| ftaume| ftax| fteam| ftechn| ftedd| fteich| fteigw| fteil| ftelef| fteleph| ftelegr| fteller| ftempel| ftemper| ftempo| ftendenz| ftentak| fteppi| ftermin| ftermit| fterrain| fterrass| fterrin| fterror| ftestat| fteuf| ftext| ftheat| fthem| ftheor| ftherap| ftick| ftief| ftier| ftipp| ftirad| ftisch| ftod| fton| ft��n| ftool| ftopf| ft��pf| ftorig| ftour| ftrader| ftradition| ftr��g| ftrain| ftr��nk| ftransp| ftr��ume| ftrauri| ftreff| ftresor| ftret| ftrick| ftrieb| ftrief| ftrift| ftrimest| ftritt| ftrott| ftr��b| ftrunk| ftrupp| ftuch| ft��ch| ft��rk| fturm| ft��rm| ftyp| ftyr| ftwist| graftum| graft��m| hoftest| iefta| iefto| ieft��| ieftra| lfta| lfto| lft��| lftum| nft��| nft��bchen| ��lfte| pft[a��hio��ru��y]| pftee| pfteig| pftender| rftr| werftrage| rftu| uftas| urfta| urfto| ��nftor| fb| fh| fk| fj| fff )""", re.X) def findWrongLigatures(el): return False if re.match(noFalsePositives, el) else re.match(incorrectLigatures, el) filtered_lines = list(filter(findWrongLigatures, lines)) # print(filtered_lines) # Step 3 Write list of words to a file with open('ligature-prevention-wordlist.txt', 'w') as file: file.writelines("%s\n" % line for line in filtered_lines)