SynonymInfo [] для Microsoft.Office.Interop.Word в C #

1

В С# я используется

using word = Microsoft.Office.Interop.Word;

Для получения синонима слов с помощью этого кода

 var app = new word.Application();
 var infosyn = app.SynonymInfo[Wtext[Op + 1].ToString(), word.WdLanguageID.wdArabic];
 foreach (var item in infosyn.MeaningList as Array)
     {

               listBox1.Items.Add(item.ToString());

     }

Изображение здесь

Мой вопрос: у меня есть только список значений (Что такое красные прямоугольники на изображении), но я хочу, чтобы все слова, как на изображении (слова в красных прямоугольниках и синих стрелках, весь список). Примечание. Я использую Meaninglist, RelatedWordList, и он не работает и создает циклы в цикле, беря каждое синонимы и проверяя их синонимы. Как это

var apps = new words.Application();
var infosyns = apps.SynonymInfo[item.ToString(), words.WdLanguageID.wdArabic] ;
foreach (var iitem in infosyns.MeaningList as Array)
{

listBox1.Items.Add(iitem.ToString());

var appss = new wordss.Application();
var infosynss = appss.SynonymInfo[iitem.ToString(),wordss.WdLanguageID.wdArabic] ;
foreach (var iiitem in infosyns.MeaningList as Array)
{

listBox1.Items.Add(iiitem.ToString());

}

}

Изображение здесь

Теги:
ms-word
office-interop
synonym

2 ответа

2

Oli4 правильный. Вам необходимо прокрутить базовые данные, выполнив что-то вроде этого:

foreach (var iiitem in infosyns.MeaningList as Array)
            {

                listBox1.Items.Add(iiitem.ToString());

                foreach (var item in iiitem.MeaningList)
                {
                    listBox1.Items.Add(item.ToString());
                }

            }
1

У меня была аналогичная проблема, однако, зациклив определенное количество раз по результатам, я получил намного больше. Это был просто быстрый код, и я считаю, что эффективность может быть улучшена, но я верю, что это поможет вам на правильном пути. (Это похоже на то, что вы сделали.

private static string[] getAllMeanings(Application wordApp, string word, int maxSize = 12,bool addOriginal = false)
    {
        List<string> stringArr = new List<string>();
        if (addOriginal)stringArr.Add(word);
        SynonymInfo theSynonyms = wordApp.SynonymInfo[word];
        foreach (var Meaning in theSynonyms.MeaningList as Array)
        {
            if (stringArr.Contains(Meaning) == false) stringArr.Add((string)Meaning);
        }
        for (int ii = 0; ii < stringArr.Count; ii++)
        {
            theSynonyms = wordApp.SynonymInfo[stringArr[ii]];
            foreach (string Meaning in theSynonyms.MeaningList as Array)
            {
                if (stringArr.Contains(Meaning)) continue;
                stringArr.Add(Meaning);
            }
            if (stringArr.Count >= maxSize) return stringArr.ToArray();
        }
        return stringArr.ToArray();
    }

В основном эта функция получает все связанные слова, а затем рекурсивно добавляет связанное слово и находит связанные слова. Это заканчивается очень близким к вашему результату, если вы установите maxSize на 15;

  • Примечание. MaxSize - это остановка функции, например, слово "have" имеет не менее 3600 "синонимов". И оптимально ваш результат должен оставаться актуальным.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню