Avatar billede submann Nybegynder
25. april 2015 - 14:22 Der er 21 kommentarer og
1 løsning

Replace af a til å i ord med Python i Notepad++

Hej

Hvordan skifter jeg a ud med å med Phyton i Notepad++?
Jeg har prøvet mig lidt frem, men ikke fundet på noget der virker.

Eksempel:
Dokumentet indeholder f.eks.


Hej, jeg sa et far i dag.
Det gik ude pa en mark.
Der var ogsa en ko, den hed Ase.



Den skulle gerne slutte med at indeholde dette.


Hej, jeg så et får i dag.
Det gik ude på en mark.
Der var også en ko, den hed Åse.



Da det jo ikke bare er alle a'er der skal skiftes, så tænkte jeg at lave en liste med de ord man roligt kan skifte, så må jeg tage resten den hårde vej.

Ved ikke om jeg har forklaret mig godt nok, men det er lidt svært da jeg er MEGET ny i Phyton... ;o)
Avatar billede arne_v Ekspert
26. april 2015 - 16:35 #1
Det er en meget svær opgave - en liste med ord er ikke tilstrækkelig.

Du vil have:

Jeg har har pa hovedet -> Jeg har hår på hovedet

pa -> på  er OK

har -> har og har -> hår    kan ikke laved ved kun at kigge i ord liste!
Avatar billede submann Nybegynder
26. april 2015 - 20:52 #2
OK...

Hvad hvis man f.eks. lavede noget ala dette:
If "helt ord" then
  if ogsa = ogsa Then
    replace('ogsa', 'også')
    o.s.v.

Og så skal har/hår så ikke være på listen, de ord jeg indtil vider har på listen, det er ord der kun kan rettes "rigtigt".

Det jeg er kommet frem til indtil vider er dette (som ikke virker)

# coding=ISO-8859-1

import string, re

# Sa skal vi prøve dette ogsa, sagde jeg at jeg haber pa det virker.
s = editor.getText()
re_split = re.compile('[ .,;!?]+')
words = re_split.split(s)

for word in words:
    word = word.replace('sa', 'så')
    word = word.replace('ogsa', 'også')
    word = word.replace('pa', 'på')
    word = word.replace('ma', 'må')

    print word


Men den ændre f.eks. også "sagde" til "sågde"

Men er heller ikke så meget inde det endnu...
Avatar billede arne_v Ekspert
27. april 2015 - 04:07 #3
Maaske noget a la:


# coding=ISO-8859-1

import string, re

replaces = { 'Sa' : 'så', 'ogsa' : 'også', 'pa' : 'på', 'ma' : 'må' }

s = 'Sa skal vi prøve dette ogsa, sagde jeg at jeg haber pa det virker.'
re_split = re.compile('[ .,;!?]+')
words = re_split.split(s)

for word in words:
    if word in replaces:
        print replaces[word]
    else:
        print word
Avatar billede submann Nybegynder
27. april 2015 - 08:17 #4
Nu skifter det da som det skal...
Men det står sådan her:


skal
vi
prøve
dette
også
sagde
jeg
at
jeg
håber

det
virker

og , og . tager den åbenbart ikke med...
Men det er da på vej den rigtige vej... ;o)
Avatar billede arne_v Ekspert
27. april 2015 - 15:03 #5
Adskillelses tegnene forsvinder p.g.a. den regex split.

Den skal erstattes af noget andet for at faa dem med.

Lad mig taenke lidt over det.
Avatar billede submann Nybegynder
27. april 2015 - 16:23 #6
Det lyder dejligt, jeg er lidt på herrens mark her... ;o)
Avatar billede submann Nybegynder
28. april 2015 - 01:59 #7
Nu har jeg rodet vider med det...
Kan man lave det sådan uden det bryder nogen "love" ?

Kan det laves smartere/nemmer ?

# coding=ISO-8859-1

import re

text = editor.getText()

text = re.sub(r"\bSa\b", "Så", text)
text = re.sub(r"\bsa\b", "så", text)
text = re.sub(r"\bogsa\b", "også", text)
text = re.sub(r"\bOgsa\b", "Også", text)
text = re.sub(r"\bhaber\b", "håber", text)
text = re.sub(r"\bHaber\b", "Håber", text)
text = re.sub(r"\bpa\b", "på", text)
text = re.sub(r"\bPa\b", "På", text)

notepad.new()
print text
Avatar billede arne_v Ekspert
28. april 2015 - 02:13 #8
Miy forslag:


# coding=ISO-8859-1

import string

replaces = { 'Sa' : 'så', 'ogsa' : 'også', 'pa' : 'på', 'ma' : 'må' }

s = 'Sa skal vi prøve dette ogsa, sagde jeg at jeg haber pa det virker.'

word = ''
for c in s:
    if c in ' .,;!?':
        if len(word) > 0:
            if word in replaces:
                print replaces[word]
            else:
                print word
            word = ''
        print c
    else:
        word = word + c
Avatar billede arne_v Ekspert
28. april 2015 - 02:14 #9
Din kode kan sikkert ogsaa bruges, men jeg tror at den bliver tung med mange kendte ord.
Avatar billede submann Nybegynder
28. april 2015 - 07:59 #10
Den skriver også ned...



skal

vi

prøve

dette

også

Men den tager tros alt , og . med... ;o)
Avatar billede submann Nybegynder
28. april 2015 - 14:46 #11
Nu skriver den det rigtigt, men skifter bare ikke ud...

# coding=ISO-8859-1

import string

replaces = { 'Sa' : 'Så', 'ogsa' : 'også', 'pa' : 'på', 'ma' : 'må' }

s = 'Sa skal vi prøve dette ogsa, sagde jeg at jeg haber pa det virker.'

word = ''
new_word = ''

for c in s:
    if c in ' .,;!?':
        if len(word) > 0:
            if word in replaces:
                new_word = new_word + replaces[word]
            else:
                new_word = new_word + word
            word = ''
        new_word = new_word + c
    else:
        new_word = new_word + c

print new_word
Avatar billede submann Nybegynder
28. april 2015 - 18:37 #12
Så, nu virker den næsten som det skal.
Men hvis det sidste ord er et der skal skiftes, så gør den ikke det.
Den skifter heller ikke f.eks. "Ase's cykel" til "Åse's cykel"

Nogen idé om det ?



# coding=ISO-8859-1
#Oven over dette, fortæl at det bla. er danske tegn vi bruger. (Skal være være med "#" foran og det skal stå øverst.)

# Impoter string, ved ikke hvad det er og hvorfor. ???????????????????
import string

# Liste med de 1000 vis af ord der skal skiftes. Rigtig øv at taste dem ind... :o(
replaces = { 'Sa' : 'Så', 'sa' : 'så', 'ogsa' : 'også', 'pa' : 'på', 'ma' : 'må', 'haber' : 'håber', 'habede' : 'håbede', 'Ase' : 'Åse' }

# Hent teksten der skal gennemse for forkerte ord.
#s = editor.getText()
s = 'Sa, nu virker det næsten som habede pa, men den vil ikke skifte "Ase's cykel", og hvor er det "pa" der skulle være der --> pa'

# Opret tomme variabler.
word = ''
new_word = ''

# For hvert tegn i teksten.
for c in s:
    # Er det en af tegnen hvor der skal skilles ?
    if c in ' .,;:!?-_/"':
        # Er det noget der er stører end 0 ?
        if len(word) > 0:
            # Er det et ord der skal skiftes ?
            if word in replaces:
                # Skift ordet til det rigtige.
                new_word = new_word + replaces[word]
            # Hvis ordet ikke er et der skal skiftes.
            else:
                # Tilføj ordet som ikke skal skiftes.
                new_word = new_word + word
            # Tøm "word" så vi kan tage et loop mere.
            word = ''
        # Tilføj tegn hvis det er noget der ikke er større end 0.
        new_word = new_word + c
    # Det var ikke en af de tegn der skiller.
    else:
        # Tilføj tegn til "word" indtil det skiller igen, på den måde får vi et HELT ord.
        word = word + c

# Åben ny tab som hele teksten skrives i.
#notepad.new()

# Skriv alt det vi har fundet ud af, i den nye tab.
print new_word
Avatar billede arne_v Ekspert
29. april 2015 - 03:43 #13
' skal nok tilfoejes til listen af adskillelses tegn.

Og saa er det nok et problem at der ikke er noget adskillelses tegn til sidst.

Hvis der er noget i word efter at den yderste for loekke er faewrdig saa skal det ogsaa processes.
Avatar billede submann Nybegynder
29. april 2015 - 15:23 #14
Jeg ved ikke lige hvordan jeg skal tilføje ' til adskillelses tegn.
Den melder fejl hvergang jeg prøver...

Jeg har været ved at se om jeg kunne tilføje "space" efter hver linje, hvis man laver det "space" manuelt, så virker det, men kan ikke lige få det til at tilføje det...

Nogen idé til de to ?

Det sidste du skriver forstår jeg ikke lige.
Avatar billede arne_v Ekspert
29. april 2015 - 17:57 #15
'' bruges jo omkring strengen, men du kan escape med \ saa 'bla\'bla'
Avatar billede arne_v Ekspert
29. april 2015 - 17:58 #16
s = s + ' '

men det kan goeres bedre
Avatar billede submann Nybegynder
29. april 2015 - 21:46 #17
Hold nu op...
Var det virkelig bare \'
Har brugt timer på at prøve at finde ud af det... ;o)

Men nu tror jeg det hele virker...
Gider du ikke lige se det igennem og se om jeg har dummet mig nogen steder ?
Det er jo det første "rigtige" jeg laver i Phyton... ;o)



# coding=ISO-8859-1
#Oven over dette, fortæl at det bla. er danske tegn vi bruger. (Skal være være med "#" foran og det skal stå øverst.)


# Impoter string, ved ikke hvad det er og hvorfor. ???????????????????
import string

# Liste med de 1000 vis af ord der skal skiftes. Rigtig øv at taste dem ind... :o(
replaces = {'Sa' : 'Så', 'sa' : 'så',
            'Pa' : 'På', 'pa' : 'på',
            'Ma' : 'Må', 'ma' : 'må',
            'Ga' : 'Gå', 'ga' : 'gå',
            'Na' : 'Nå', 'na' : 'nå',
            'Fa' : 'Få', 'fa' : 'få',
            'Ase' : 'Åse', 'ase' : 'åse',
            'Gar' : 'Går', 'gar' : 'går',
            'Hab' : 'Håb', 'hab' : 'håb',
            'Sma' : 'Små', 'sma' : 'små',
            'Sla' : 'Slå', 'sla' : 'slå',
            'Faet' : 'Fået', 'faet' : 'fået',
            'Ogsa' : 'Også', 'ogsa' : 'også',
            'Hard' : 'Hård', 'hard' : 'hård',
            'Hand' : 'Hånd', 'hand' : 'hånd',
            'Hard' : 'Hård', 'hard' : 'hård',
            'Opna' : 'Opnå', 'opna' : 'opnå',
            'Haber' : 'Håber', 'haber' : 'håber'}

# Hent teksten der skal gennemse for forkerte ord.
#s = editor.getText()
s = 'Langt om længe virker det...\nDet tog ogsa sin tid at fa den til at skifte pa, ga, ma, gar, o.s.v.\nSelv Ase\'s cykel kom med... ;o)\nNu haber jeg bare ikke der er for mange fejl i...\n1000 tak for hjælpen Arne.'

# Opret tomme variabler.
word = ''
new_word = ''

# Tilføj mellemrum for enden af hver linje så vi senere kan skille der også.
s = s.replace("\r\n"," \r\n")

# For hvert tegn i teksten.
for c in s:
    # Er det en af tegnen hvor der skal skilles ?
    if c in ' .,;:!¡?¿-_\/$£€"§()[]{}\'\n':
        # Er det noget der er stører end 0 ?
        if len(word) > 0:
            # Er det et ord der skal skiftes ?
            if word in replaces:
                # Skift ordet til det rigtige.
                new_word = new_word + replaces[word]
            # Hvis ordet ikke er et der skal skiftes.
            else:
                # Tilføj ordet som ikke skal skiftes.
                new_word = new_word + word
            # Tøm "word" så vi kan tage et loop mere.
            word = ''
        # Tilføj tegn hvis det er noget der ikke er større end 0.
        new_word = new_word + c

    # Det var ikke en af de tegn der skiller.
    else:
        # Tilføj tegn til "word" indtil det skiller igen, på den måde får vi et HELT ord.
        word = word + c

# Fjern de ekstra mellemrum for enden af hver linje som vi lavede tidliger.
new_word = new_word.replace(" \r\n","\r\n")

# Åben ny tab som hele den nye tekst skrives i.
#notepad.new()

# Skriv alt det vi har fundet ud af, i den nye tab.
print new_word
Avatar billede submann Nybegynder
02. maj 2015 - 08:21 #18
Smider du ikke et svar Arne ?
Avatar billede arne_v Ekspert
04. maj 2015 - 03:51 #19
Kommentarer:

1) erstatnings listen kan godt laeses fra en fil i.s.f. som initialisering i koden

2)

s = s.replace("\r\n"," \r\n")

tror jeg er overfloedig med \r og \n i adskillelses listen

3)

new_word er et daarligt variabel navn for noget som mere end et ord

4)

problemet med manglende skill tegn til sidst skal loeses med en funktion
Avatar billede arne_v Ekspert
04. maj 2015 - 03:52 #20

# coding=ISO-8859-1
# Oven over dette, fortæl at det bla. er danske tegn vi bruger. (Skal være være med "#" foran og det skal stå øverst.)

# Impoter string, ved ikke hvad det er og hvorfor. ???????????????????
import string

# Liste med de 1000 vis af ord der skal skiftes. Rigtig øv at taste dem ind... :o(
replaces = {'Sa' : 'Så', 'sa' : 'så',
            'Pa' : 'På', 'pa' : 'på',
            'Ma' : 'Må', 'ma' : 'må',
            'Ga' : 'Gå', 'ga' : 'gå',
            'Na' : 'Nå', 'na' : 'nå',
            'Fa' : 'Få', 'fa' : 'få',
            'Ase' : 'Åse', 'ase' : 'åse',
            'Gar' : 'Går', 'gar' : 'går',
            'Hab' : 'Håb', 'hab' : 'håb',
            'Sma' : 'Små', 'sma' : 'små',
            'Sla' : 'Slå', 'sla' : 'slå',
            'Faet' : 'Fået', 'faet' : 'fået',
            'Ogsa' : 'Også', 'ogsa' : 'også',
            'Hard' : 'Hård', 'hard' : 'hård',
            'Hand' : 'Hånd', 'hand' : 'hånd',
            'Hard' : 'Hård', 'hard' : 'hård',
            'Opna' : 'Opnå', 'opna' : 'opnå',
            'Haber' : 'Håber', 'haber' : 'håber'}

def replace_word(word):
    # Er det noget der er stører end 0 ?
    if len(word) > 0:
        # Er det et ord der skal skiftes ?
        if word in replaces:
            # Skift ordet til det rigtige.
            return replaces[word]
        # Hvis ordet ikke er et der skal skiftes.
        else:
            # Tilføj ordet som ikke skal skiftes.
            return word
    else:
        return ''

# Hent teksten der skal gennemse for forkerte ord.
#s = editor.getText()
s = 'Langt om længe virker det...\nDet tog ogsa sin tid at fa den til at skifte pa, ga, ma, gar, o.s.v.\nSelv Ase\'s cykel kom med... ;o)\nNu haber jeg bare ikke der er for mange fejl i...\n1000 tak for hjælpen Arne.'

# Opret tomme variabler.
word = ''
replaced_s = ''

# For hvert tegn i teksten.
for c in s:
    # Er det en af tegnen hvor der skal skilles ?
    if c in ' .,;:!¡?¿-_\/$£€"§()[]{}\'\r\n':
        replaced_s = replaced_s + replace_word(word)
        # Tøm "word" så vi kan tage et loop mere.
        word = ''
        # Tilføj tegn hvis det er noget der ikke er større end 0.
        replaced_s = replaced_s + c
    # Det var ikke en af de tegn der skiller.
    else:
        # Tilføj tegn til "word" indtil det skiller igen, på den måde får vi et HELT ord.
        word = word + c
# Process resten hvis der ikke er skille tegn til sidst
replaced_s = replaced_s + replace_word(word)

# Åben ny tab som hele den nye tekst skrives i.
#notepad.new()

# Skriv alt det vi har fundet ud af, i den nye tab.
print replaced_s
Avatar billede arne_v Ekspert
04. maj 2015 - 03:52 #21
og et svar
Avatar billede submann Nybegynder
04. maj 2015 - 17:40 #22
Perfekt...
1000 tak for alt hjælpen, nu bliver arbejdet noget nemmere for mig... ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester