Dies ist mein Code:Synonyme für Wörter von Levenshtein Entfernung
public void SearchWordSynonymsByLevenstein()
{
foreach (var eachWord in wordCounter)
{
foreach (var eachSecondWord in wordCounter)
{
if (eachWord.Key.Length > 3)
{
var score = LevenshteinDistance.Compute(eachWord.Key, eachSecondWord.Key);
if (score < 2)
{
if(!wordSynonymsByLevenstein.Any(x => x.Value.ContainsKey(eachSecondWord.Key)))
{
if (!wordSynonymsByLevenstein.ContainsKey(eachWord.Key))
{
wordSynonymsByLevenstein.Add(eachWord.Key, new Dictionary<string, int> { { eachSecondWord.Key, eachSecondWord.Value } });
}
else
{
wordSynonymsByLevenstein[eachWord.Key].Add(eachSecondWord.Key, eachSecondWord.Value);
}
}
}
}
}
}
}
Mein wordCounter
ist Dictionary<string, int>
wo Schlüssel meine jedes Wort und Wert zählen, wie viele dieses Wort in den Dokumenten vorhanden ist. Etwas wie ein Beutel voller Worte. Ich muss Synonyme für eachWord
von anderen eachSecondWord
suchen. Diese Methode kostet zu viel Zeit. Die Zeit steigt exponentiell. Gibt es eine andere Möglichkeit, die Zeit zu reduzieren?
Muss 'wordSynonymsByLevenstein' wirklich ein 'Dictionary>' sein? Warum nicht einfach eine 'Dictionary >'? Sie können das verwenden, um die "Synonyme" zu finden, dann gehen Sie zu "wordCounter" für die Zählungen. –
juharr
Danke, später mache ich das: 'if (wordSynonymsByLevenstein.TryGetValue (eachMainWord, aus isThisWord)) { \t foreach (var eachWw in isThisWord) \t { \t \t mainWordWithSynonyms.Add (eachWw.Key); \t \t fullCounted = vollzählig + jederWWert; \t} \t var distintedWord = mainWordWithSynonyms.DistinctBy (x => x) .ToList(); \t if (mainFoundWords.Any (x => distinctedWord.Any (y => y == x)) && compFoundWords.Any (x => distinctedWord.Any (y => y == x))) { \t \t \t relationScore = relationScore + ((doppelt) 1/(doppelt) fullCounted); \t \t gezählteEqualWord ++; \t} } '' So wordSynonymsByLevenshtein' muss das sein 'Dictionary' – Sidron
Was ich sagen will ist, dass, wenn' wordSynonymsByLevenstein' ein 'Wörterbuch' dann würden Sie die 'isThisWord' raus und es wäre die Liste der Wörter, also ändere 'eachWw.Key' in' eachWw' und 'eachWw.Value' in' wordCounter [eachWw] ' –
juharr