Gå til innhold

String - replace(): Hvordan gjøre om flere ord?


Anbefalte innlegg

Hei

 

Jeg fortsetter min utvidelse av programmeringens verden og javascript ser ut som kan bli det nye store. Enkelt, samtidig som det er masse festlige muligheter.

 

Det jeg skal lage nå er en webside hvor du skriver inn en tekst på bokmål. Og så kommer den ut på nynorsk. Selvsagt ikke noe perfekt nynorsk, men jeg ser for meg at den gjør om enkle ord som: "gutter" til "gutar" osv.

 

Jeg har sett litt på websider som gjør det samme. For eksempel Freetranslation.com og denne siden.

Det jeg ser er de er laget med langt mer avanserte løsninger. Det ser ut for meg som de henter oversettelsen fra et annet dokument/database.

 

En slik løsning ønsker jeg ikke. Men W3schools har svaret. Nesten.

<script type="text/javascript">

var str="Tre store gutter"
document.write(str.replace(/gutter/,"gutar"))

</script>

 

Her har vi kjernen i det jeg søker.

Men, det er jo flere ord i språket enn gutter. Jeg vil oversette mange flere i samme slengen. Så spørsmålet er enkelt:

 

Finnes det et tegn eller lignende jeg kan sette inn slik at jeg kan legge inn flere kriterier?

Evt. andre måter å gjøre dette enkelt på.

 

Antakelig vil jeg få behov for å implementere dette i en tekstboks etterhvert, men først må jeg klare dette.

 

På forhånd takk!

Lenke til kommentar
Videoannonse
Annonse

Lope en array med ordpar

 

Hei

 

Jeg fortsetter min utvidelse av programmeringens verden og javascript ser ut som kan bli det nye store. Enkelt, samtidig som det er masse festlige muligheter.

 

Det jeg skal lage nå er en webside hvor du skriver inn en tekst på bokmål. Og så kommer den ut på nynorsk. Selvsagt ikke noe perfekt nynorsk, men jeg ser for meg at den gjør om enkle ord som: "gutter" til "gutar" osv.

 

Jeg har sett litt på websider som gjør det samme. For eksempel Freetranslation.com og denne siden.

Det jeg ser er de er laget med langt mer avanserte løsninger. Det ser ut for meg som de henter oversettelsen fra et annet dokument/database.

 

En slik løsning ønsker jeg ikke. Men W3schools har svaret. Nesten.

<script type="text/javascript">

var str="Tre store gutter"
document.write(str.replace(/gutter/,"gutar"))

</script>

 

Her har vi kjernen i det jeg søker.

Men, det er jo flere ord i språket enn gutter. Jeg vil oversette mange flere i samme slengen. Så spørsmålet er enkelt:

 

Finnes det et tegn eller lignende jeg kan sette inn slik at jeg kan legge inn flere kriterier?

Evt. andre måter å gjøre dette enkelt på.

 

Antakelig vil jeg få behov for å implementere dette i en tekstboks etterhvert, men først må jeg klare dette.

 

På forhånd takk!

5044967[/snapback]

Lenke til kommentar

Spørs om det ikke er lettere å gjøre dette serverside. F.eks. i php:

<?php
/*
* En liste med ord i formatet:
* $ord['gutter'] = 'gutar';
*/
include('ord.php'); 
$text = $_POST['text']; // Fra et tekstfelt kalt "text" i en form
$splittet = preg_split("/\s+/", $text); // Splitt i ord
foreach ($splittet as $ordet) {
 foreach ($ord as &$bokmaal => &$nynorsk) {
   str_replace($bokmaal, $nynorsk, $ordet);  // Erstatt hvert bokmålord med nynorskord
   }
 }
$tekst = implode(' ', $splittet);
echo "<h2>Oversatt tekst:</h2>\n<p>$tekst</p>";
?>

Om du absolutt vil gjøre dette med Javascript, kan jeg ikke gi deg noe konkret forslag. Da blir du nødt til å splitte teksten til ord, antagelig slik:

var splittet = tekst.split(/\s+/)
// Loop gjennom ordene med foreach (var ord in splittet) 
// For hvert ord, loop gjennom en liste over nynorske ord
// Replace så bokmålordet med nynorsk ord
// Oversimplisert

Dessuten skulle det ikke forundre meg om replace kan ta arrays som parametre, så du kan gjøre noe slikt:

var str = "tre store gutter"
str.replace(["gutter", "andrebokmålord"], ["gutar", "andreordpånynorsk"])

Lenke til kommentar

string.replace tar desverre bare imot to strenger som parametere. Viss du bruker «/tekst/» , «/text/i» osv som første, gjør du et regular expression søk. Dropp dét, og bruk strings for vanlig replace. Husk å sørge for at de to arraysene har like mange keys

string = 'alle guttene spiser mat, før de så går hjem og sover i husene sine'
bokmaal = new Array('gutter','de', 'husene', 'sover','hjem')
newNorwegian = new Array('guttar','dei', 'husa', 'søv','heim')
len = bokmaal.length
 for(x=0; x > len; x++)
 {
  string = string.replace(bokmaal[x], newNorwegian[x])
 }

Endret av dabear
Lenke til kommentar

That's it?

Så enkelt!?

...

...

Dere får unskylde min manglende kunnskap om emne, men når jeg gjør slik:

<body>
<script language="javascript">
string = 'alle guttene spiser mat, før de så går hjem og sover i husene sine'
bokmaal = new Array('gutter','de', 'husene', 'sover','hjem')
newNorwegian = new Array('guttar','dei', 'husa', 'søv','heim')
len = bokmaal.length
for(x=0; x > len; x++)
{
 string = string.replace(bokmaal[x], newNorwegian[x])
}
</script>

Da kommer det ingenting... :dontgetit:

Endret av kennethdammyr
Lenke til kommentar

Slik altså?

 

<script language="javascript">
string = 'alle guttene spiser mat, før de så går hjem og sover i husene sine'
bokmaal = new Array('gutter','de', 'husene', 'sover','hjem')
newNorwegian = new Array('guttar','dei', 'husa', 'søv','heim')
len = bokmaal.length
for(x=0; x > len; x++)
{
string = string.replace(bokmaal[x], newNorwegian[x])
}

document.write ("newNorwegian()")
</script>

(Hvordan får skriver jeg at en string skal vises?)

 

Hvis dette funker blir jeg glad! :D

Lenke til kommentar

<html>
<head>
<script type="text/javascript">
string = 'alle guttene spiser mat, før de så går hjem og sover i husene sine'
bokmaal = new Array('guttene','de', 'spiser', 'husene', 'sover','hjem')
newNorwegian = new Array('gutane','dei', 'eter', 'husa', 'søv','heim')
len = bokmaal.length
for(x=0; x < len; x++)
{
string = string.replace(bokmaal[x], newNorwegian[x])
}

document.write (string)
</script>
</head>
<body>
</body>
</html>

Men helst slik:

<html>
<head>
<script type="text/javascript">
function changeLanguage(HTMLId)
{
   
   elem   = document.getElementById(HTMLId)
   string = elem.childNodes[0].nodeValue
   
   bokmaal = new Array('guttene','de', 'spiser', 'husene', 'sover','hjem')
   newNorwegian = new Array('gutane','dei', 'et', 'husa', 'søv','heim')
   len = bokmaal.length
   for(x=0; x < len; x++)
   {
       string = string.replace(bokmaal[x], newNorwegian[x])
   }
   
   //fjerner teksten
   removeChildren(elem)
   //ny tekst
   elem.appendChild(document.createTextNode(string))

}
function removeChildren(id)
{
   try
   {
       while(id.childNodes)
       {
           id.removeChild(id.childNodes[0])
       }
   }catch(e){}
}

</script>
</head>
<body onload="changeLanguage('dynamicContainer')">
   <div id="dynamicContainer">
   alle guttene spiser mat, før de så går hjem og sover i husene sine
   </div>
</body>
</html>

Litt mer kode men :p

Lenke til kommentar

Da har jeg jobbet litt mer med den. Og problemene begynner å komme. Det er to saker som er ganske sentrale.

 

1. Den er veldig sensitiv og oversetter ikke bare enkle ord, men ord som er inni ord. Eksempel:

Navnet "Kenneth". Den gjør da om "en" til "ein". Resultatet blir "Keinneith". Altså vil jeg gjøre slik at den kun tar ordene når de står alene og ikke inni andre ord.

 

2. Skriver man et ord med stor bokstav vil den ikke oversette med mindre jeg skriver inn oversettelsen også med store bokstaver. Er det mulig å gjøre oversettelsen uavhengig av størrelsen på bokstavene?

 

Takk for all hjelp så langt.

Tjenesten ligger her:

nynorsk.moo.no

Lenke til kommentar
Da har jeg jobbet litt mer med den. Og problemene begynner å komme. Det er to saker som er ganske sentrale.

 

1. Den er veldig sensitiv og oversetter ikke bare enkle ord, men ord som er inni ord. Eksempel:

Navnet "Kenneth". Den gjør da om "en" til "ein". Resultatet blir "Keinneith". Altså vil jeg gjøre slik at den kun tar ordene når de står alene og ikke inni andre ord.

Hvordan definerer du et ord? Jo for at det skal være et ord, må det opptre som noen bokstaver, fulgt av et mellomrom, komma,eller et annet tegn. Skal du bare erstatte ord som er fulgt av et mellomrom, kan du gjøre

string = string.replace(bokmaal[x]+ ' ', newNorwegian[x]+ ' ')

Men du må nok bruke regex for å matche andre tegn.

 

2. Skriver man et ord med stor bokstav vil den ikke oversette med mindre jeg skriver inn oversettelsen også med store bokstaver.  Er det mulig å gjøre oversettelsen uavhengig av størrelsen på bokstavene?

 

Takk for all hjelp så langt.

Tjenesten ligger her:

nynorsk.moo.no

5096869[/snapback]

Da må du gå over til regex igjen, med modifieren i for å få case-insensitive replace, uansett er dette en jobb for et serverside språk; i php kan du fks bruke str_ireplace, som er case-insensitiv søk uten regex

Lenke til kommentar

Dette med store bokstaver var vanskelig. Men det er mulig jeg klarer å lage en hjemmelagd løsning hvor jeg samtidig kopierer alle ordene, gjør om til stor forbokstav og limer inn igjen. Det ordner seg.

 

Løsningen for å unngå at "Kenneth" ble "Keinneith" fungerte halveis. Av en eller anne grunn fungerer det bare med "en", ikke med "et". :dontgetit:

 

EDIT: Litt tenking og jeg finner ut at det er jo selvfølgelig fordi "et" så ofte ligger på slutten av ordet. Og da gjelder jo det samme for "en". "Stolen" blir til "stolein" osv.

Endret av kennethdammyr
Lenke til kommentar

Nå har jeg løst begge problemene på med hjemmelagde løsninger.

Jeg la inn slik:

string = string.replace(' ' + bokmaal[x]+ ' ', ' ' + newNorwegian[x]+ ' ')

Dermed tar den kun enkeltstående ord.

Store bokstaver har jeg løst litt mer kreativt. Jeg lagde et Excel-dokument som har funksjoner slik at jeg limer inn alle ordene et sted og får ut en versjon med stor forbokstav. Da er det bare å lime det inn i php-fila igjen.

 

Dermed begynner ting å fungere bra. Takk for hjelpa!

http://nynorsk.moo.no

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...