我正在编写一些自然语言处理代码,并希望有一个二进制格式的字典来查找单词的含义。我最初使用标准的序列化和二进制格式化机制,但对生成的文件有多大以及充满(冗余)类型信息的程度感到震惊。我一直试图让 protobuf-net 库为我工作,但有以下问题:
当我将字典写入文件时,我还将记录开始的偏移量放入索引文件中,我认为序列化工作正常,但是当我查找条目时,我得到正确的偏移量,但 DictionaryEntry 的 Definitions 属性包含所有DictionaryDefinitions 从那时起(数千个)。列表中的第一个 DictionaryDefinition 是搜索词的正确定义。
我曾尝试将其作为属性和公共成员来实现,但没有成功。我还尝试了 ProtoContract 属性中的 SkipConstructor = true 和 ProtoMember 属性中的 OverwriteList = true。
[ProtoContract]
public class DictionaryEntry
{
[ProtoMember(1)]
public string EntryKey { get; set; }
[ProtoMember(2)]
public List<DictionaryDefinition> Definitions{ get; set; }
}
[ProtoContract]
public class DictionaryDefinition
{
[ProtoMember(1)]
public string PartOfSpeech { get; set; }
[ProtoMember(2)]
public string Definition { get; set; }
}
我认为我在其余代码中没有做任何特别愚蠢的事情,但是如果有人可以为这部分提出任何建议,我想排除这一点。
谢谢,
米