私はいくつかの自然言語処理コードを書いており、単語の意味を検索するためのバイナリ形式の辞書が必要です。私は当初、標準のシリアライゼーションとバイナリ フォーマッタのメカニズムを使用していましたが、結果として得られるファイルがいかに大きく、(冗長な) 型情報でいっぱいであるかにぞっとしました。protobuf-net ライブラリを機能させようとしていますが、次の問題があります。
辞書をファイルに書き込むとき、レコードの開始位置のオフセットもインデックス ファイルに入れます。シリアル化は問題なく機能すると思いますが、エントリを調べると正しいオフセットが得られますが、DictionaryEntry の Definitions プロパティにはすべてのそれ以降の DictionaryDefinitions (数千)。List の最初の 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; }
}
コードの残りの部分で特に愚かなことをしたとは思いませんが、誰かがこの部分について何か提案できる場合は、これを除外したいと思います。
ありがとう、
M