Avatar billede mettegp Nybegynder
02. august 2005 - 16:35 Der er 7 kommentarer

Finde mest forekommende ord i en tekst i et string[] array

Jeg har et en sætning:
string saetning;
saetning = "Der var et lille egern som kravlede op i et stort trae, for at spise en noed;
Jeg har brugt Split metoden for string til at dele saetningen op i et array af ord.

string [] opsplittetSaetningIOrd = satning.Split(new char {' ', '.', ','})
Men så er mit problem, hvordan finder jeg det ord som forekommer flest gange i sætningen.
Jeg har også brug for at finde den vokal der optræder flest gange i sætningen. Hvordan gør jeg det?
Avatar billede jokkejensen Novice
02. august 2005 - 17:19 #1
lytter lige med :), skal bruge noget til automatisk at generere keywords til meta :).. spytter gerne 200 points til den der kan splitte en streng til et array i ord, og sortere efter antal forekomster og til sidst kun indeholde de 25 vigtigste ord :)..

De sidste 25 ord skal minimum være på 4 bogstaver og ikke forekomme i et andet array :)
Avatar billede -xyz- Nybegynder
02. august 2005 - 17:53 #2
du kan overføre til en hashtable, hvor du bruger ordet som ID og value til tæller, og så bagefter sortere på den.

eks.

foreach(string ord in sætning)

if(hashtable.Contains(ord)¨
{
  HashTable[ord]++;
}
else
{
  HashTable.Add(Ord, 1);
}
}
Nu virker dette her ikke helt, men det giver en ide om hvordan, du kunne gøre.
Avatar billede arne_v Ekspert
02. august 2005 - 18:23 #3
Til inspiration:

using System;
using System.Collections;

public class WordCount : IComparable
{
    string word;
    int count;
    public WordCount(string word)
    {
        this.word = word;
        this.count = 1;
    }
    public string Word
    {
        get
        {
            return word;
        }
    }
    public int Count
    {
        get
        {
            return count;
        }
    }
    public void Increment()
    {
        count++;
    }
    public int CompareTo(object o)
    {
        return ((WordCount)o).Count - count;
    }
}

public class WordCountList
{
    private Hashtable list;
    private int minlen;
    public WordCountList(int minlen)
    {
        this.list = new Hashtable();
        this.minlen = minlen;
    }
    public void AddWord(string word)
    {
        if(word.Length >= minlen)
        {
            if(list.ContainsKey(word))
            {
                ((WordCount)list[word]).Increment();
            }
            else
            {
                list.Add(word, new WordCount(word));
            }
        }
    }
    public void AddText(string text)
    {
        string[] words = text.Split(" ".ToCharArray());
        for(int i = 0; i < words.Length; i++)
        {
            AddWord(words[i]);
        }
    }
    public ICollection GetTop(int n)
    {
        ArrayList temp = new ArrayList();
        temp.AddRange(list.Values);
        temp.Sort();
        temp.RemoveRange(n, temp.Count - n);
        return temp;
    }
}

class TestClass
{
    public static void Test(string s)
    {
        WordCountList proc = new WordCountList(1);
        proc.AddText(s);
        ICollection top = proc.GetTop(3);
        foreach(WordCount wc in top)
        {
            Console.WriteLine(wc.Word + " : " + wc.Count);
        }
    }
    public static void Main(string[] args)
    {
        Test(@"Dette er en lille test - er en en");
    }
}
Avatar billede jokkejensen Novice
02. august 2005 - 19:11 #4
snedigt.. http://www.eksperten.dk/spm/636884..

og jeg undskylder mette.. men du blev sikkert også klogere :)
Avatar billede Syska Mester
03. august 2005 - 08:15 #5
Det ser jo spændende ud.....

Er der nogen speciel grund til at du også laver en klasse til Count af ord, er det for at kunne lave en Sort på den at den kommer i en klasse for sig selv?

Må se om jeg kan huske det her link til en anden gang, der bruger du jo nogle smarte teknikker :-P

// ouT
Avatar billede arne_v Ekspert
03. august 2005 - 08:26 #6
Jeg overvejede også andre modeller, men jeg syntes ikke lige at jeg kunne
se de andre hænge sammen på samme måde, 2 arrays string[] og int[] er hverken
så OO pænt eller så nemt at håndtere (sorteringen er nem nok, men både
hente ud fra Hashtable og returnereing fra GetTop bliver grimmere)
Avatar billede Syska Mester
03. august 2005 - 08:36 #7
okay, sjovt nok også at vide hvad en proff programmør tænker på, men jeg synes også helt klart at det her en en pæn og nok også meget pænere end den måde jeg ville have lavet det på :-P

Keep up the good work

// ouT
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
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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