【问题标题】:SynonymInfo[] For Microsoft.Office.Interop.Word in C#SynonymInfo[] 用于 C# 中的 Microsoft.Office.Interop.Word
【发布时间】:2016-07-30 20:37:30
【问题描述】:

在 C# 中我使用

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());

     }

图片here

我的问题是我只有含义列表(图像中的红色框是什么),但我想要图像中的所有单词(红色框和蓝色箭头中的单词,整个列表)。 注意:我使用了 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());

}

}

图片here

【问题讨论】:

    标签: c# .net ms-word office-interop synonym


    【解决方案1】:

    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());
                    }
    
                }
    

    【讨论】:

      【解决方案2】:

      我遇到了类似的问题,但是通过在结果中循环预定义的次数,我得到了更多。这只是一个快速代码,我相信效率可以提高,但我相信它会让你走上正轨。 (这与您所做的有些相似。

      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 个“同义词”。最佳情况下,您的结果应该保持相关性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-03
        相关资源
        最近更新 更多