在C#i中使用
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
答案 0 :(得分: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 :(得分: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,则最终会非常类似于您的结果;