Nu skal du jo nok ikke forvente at få noget kode som gør at du kan udkonkurrere Google i næste uge.
:-)
Men prøv og se om ikke følgende kode (som er hacket sammen udfra lidt Java kode jeg havde på lageret og lidt adhoc kode) kan give nogle ideer:
using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions;
namespace E { public static class Fonetic { public static string Convert(string s) { string s2 = s.ToLower(); s2 = s2.Replace("æ", "ae"); s2 = s2.Replace("ø", "oe"); s2 = s2.Replace("å", "aa"); s2 = s2.Replace("u", "v"); s2 = s2.Replace("ph", "f"); s2 = s2.Replace("ch", "k"); s2 = Regex.Replace(s2, "([gkrst])(h)", "$1"); s2 = s2.Replace("ds", "s"); s2 = s2.Replace("nd", "n"); s2 = s2.Replace("c", "k"); s2 = s2.Replace("d", "t"); s2 = s2.Replace("w", "v"); s2 = s2.Replace("z", "s"); s2 = s2.Replace("x", "s"); StringBuilder sb = new StringBuilder(); sb.Append(s2[0]); for(int i = 1; i < s2.Length & sb.Length <= 4; i++) { if("aeiouyæøå".IndexOf(s2[i]) < 0 && s2[i] != s2[i-1]) { sb.Append(s2[i]); } } return sb.ToString(); } } public class TeraByteDatabaseSimulator { private static readonly char[] WORD_DELIM = { ' ', ',', '.', '!', '?', '"', '\'' }; private Dictionary<string, string> map = new Dictionary<string, string>(); public void InsertText(string txt) { foreach(string word in txt.Split(WORD_DELIM, StringSplitOptions.RemoveEmptyEntries)) { string key = Fonetic.Convert(word); if(!map.ContainsKey(key)) { map.Add(key, word); } else { map[key] = word; } } } public string Suggest(string txt) { StringBuilder sb = new StringBuilder(); int ix = 0; foreach(string word in txt.Split(WORD_DELIM, StringSplitOptions.RemoveEmptyEntries)) { string key = Fonetic.Convert(word); if(!map.ContainsKey(key)) { sb.Append(word); } else { sb.Append(map[key]); } ix = txt.IndexOf(word, ix) + word.Length; if(ix < txt.Length) sb.Append(txt[ix]); } return sb.ToString(); } } public class Program { private static TeraByteDatabaseSimulator db = new TeraByteDatabaseSimulator(); public static void Test(string s) { Console.WriteLine(s); Console.WriteLine(db.Suggest(s)); } public static void Main(string[] args) { db.InsertText("Snehvide og de syv dværge, Tornerose og den grimme ælling er alle tre eventyr."); db.InsertText("Hej, Er der nogen der kender til den nemme måde, at lave en \"Mente du\"-funktion? ligesom f.eks. Google hvis en søgning ikke giver et resultat?"); db.InsertText("Efter besøg fra Bill Clinton har Nordkoreas diktator benådet to amerikanske journalister, der var idømt strafarbejde. Nordkoreas diktator Kim Jong Il har besluttet at løslade to amerikanske journalister, skriver nyhedsbureauerne."); Test("Er Bil Klinton's success et eventor eller et result af hårdt arbejde?"); Console.ReadKey(); } } }
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.