私は最近Pythonで同様のことをしました。
各品詞は、品詞のリスト(非終端記号)または単一の単語(端末)のいずれかです。これは比較的型なしではありません
enum Type {
Sentence,
NounPhrase,
VerbPhrase,
Conjunction,
...
};
interface PartOfSpeech { };
class NonTerminal implements PartOfSpeech {
Type type;
List<PartOfSpeech> subparts;
};
class Terminal implements PartOfSpeech {
String word;
};
:だからクラスにのようなものを作成することができ、あなたのプログラムは、これらの唯一の有効なstruturesを構築する必要があります(たとえば、何の文章のリストからなる動詞句を作る - あなたはそれを行うことができますが、それはです意味がない!)。
代替ルートは、より明示的な型システムを定義することです。したがって、品詞の各タイプに対してクラスを定義することができます。
class VerbPhrase {
Verb verb;
AdverbPhrase adverb; /* optional */
...
};
動詞句を作るいくつかの方法があるので、あなたの代わりに、各タイプのためのクラスを持つことができます:ように
interface VerbPhrase { };
class IntransitiveVerbPhrase implements VerbPhrase {
Verb verb;
AdverbPhrase adverb; /* optional */
};
class TransitiveVerbPhrase implements VerbPhrase {
Verb verb;
AdverbPhrase adverb; /* optional */
NounPhrase obj;
};
とします。 Javaレベルでの最適なタイプのExploitnessの程度は、最初は明白ではないかもしれません。まず、簡単な文章を扱い、それがどのように感じられるかを見てみましょう。
私のケースでは、それぞれがターミナルまたは非ターミナルのいずれかから継承していますが、スピーチタイプの各部分のクラスを作成しました。それから、どのように各タイプを構築できるかについてのルールがあります。これは、それらのいくつかのために一種の混乱しました。
、言うためのコードです
add_rule(NounPhrase, [Noun])
add_rule(NounPhrase, [RelativeNounWord])
add_rule(NounPhrase, [Noun, AdjectiveClause])
add_rule(NounPhrase, [Article, Noun])
add_rule(NounPhrase, [Article, Adjectives, Noun])
add_rule(NounPhrase, [Article, Noun, AdjectiveClause])
add_rule(NounPhrase, [Article, Adjectives, Noun, AdjectiveClause])
add_rule(NounPhrase, [Adjectives, Noun])
add_rule(NounPhrase, [Adjectives, Noun, AdjectiveClause])
add_rule(NounPhrase, [Article, Adjectives, Noun])
...
「名詞句が名詞である。あるいは、それはAdjectiveClause続く名詞だ、RelativeNoun。またはです。または、等」。ツリーを取得するまで、単語のリストにルールを適用しようとする一般的なパーサがあります。 (http://code.google.com/p/ejrh/source/browse/trunk/ircbot/nl.pyに乱雑で文書化されていないコードを見ることができます)
ここにはある程度の組み合わせの爆発があります。品詞/品詞/ AdjectiveClause /などのすべての可能な組み合わせに規則を持たせることで、新しい種類の品詞を導入するか、またはその一部をオプションにするだけで、多分改善する可能性があります。存在/欠席、あなたはそれらをオプションにすることができます。
ツリーの良好なデータ構造とは何か、またはツリー形式になる前にこの文字列をどのように表現するべきかという疑問はありますか? – jacobm
はい、それは結果がツリー形式になるようにこの文字列をどのように表現できるかです。 –
解析中に直接ツリー形式に変換してみませんか? –