3

自然言語パーサーによって返される品詞タグやその他のラベルの識別結合を作成しようとしています。

C#/Java では文字列または列挙型のいずれかを使用するのが一般的ですが、F# ではこれらが個別の読み取り専用値であるため、判別共用体の方が適しているようです。

言語リファレンスで、この記号 ``...`` を使用してキーワード/予約語を区切ることができることがわかりました。これは

type ArgumentType =
| A0 // subject
| A1 // indirect object
| A2 // direct object
| A3 //
| A4 //
| A5 //
| AA //
| ``AM-ADV``

ただし、タグには $ などの記号が含まれています。

type PosTag =
| CC // Coordinating conjunction
| CD // Cardinal Number
| DT // Determiner
| EX // Existential there
| FW // Foreign Word
| IN // Preposision or subordinating conjunction
| JJ // Adjective
| JJR // Adjective, comparative
| JJS // Adjective, superlative
| LS // List Item Marker
| MD // Modal
| NN // Noun, singular or mass
| NNP // Proper Noun, singular
| NNPS // Proper Noun, plural
| NNS // Noun, plural
| PDT // Predeterminer
| POS // Possessive Ending
| PRP // Personal Pronoun
| PRP$ //$ Possessive Pronoun
| RB // Adverb
| RBR // Adverb, comparative
| RBS // Adverb, superlative
| RP // Particle
| SYM // Symbol
| TO // to
| UH // Interjection
| VB // Verb, base form
| VBD // Verb, past tense
| VBG // Verb, gerund or persent participle
| VBN // Verb, past participle
| VBP // Verb, non-3rd person singular present
| VBZ // Verb, 3rd person singular present
| WDT // Wh-determiner
| WP // Wh-pronoun
| WP$ //$ Possessive wh-pronoun
| WRB // Wh-adverb
| ``#``
| ``$``
| ``''``
| ``(``
| ``)``
| ``,``
| ``.``
| ``:``
| `` //not sure how to escape/delimit this

``...`` WP$ や ( のような記号では機能しません。

また、パーサーが `` を意味のある記号として返すという興味深い問題があるため、これもエスケープする必要があります。

これを行う他の方法はありますか、それとも差別された組合ではこれは不可能ですか?

現在、次のようなエラーが発生しています

  • 名前空間、モジュール、型、または共用体のケース名が無効です
  • 識別された共用体ケースと例外ラベルは大文字の識別子でなければなりません

これらのばかげたケースで toString をオーバーライドして、記号を英数字の同等のものに置き換えることができると思いますか?

4

2 に答える 2

1

私の経験から、ダブルバックティックマーク識別子は、letBindingsまたはtypemembersでのみ完全にサポートされているようです。つまり、任意の文字シーケンスを内部に入れることができます(@F#codegen用に予約されている文字を除く)。

モジュール、タイプ、またはDUケース定義で識別子として使用する場合、一部の文字がサポートされていないため、うまく機能しません。

たとえば、、、、、、、、、または「無効な名前空間.、モジュール/、タイプ*、または ユニオンケース名」エラーを生成し+ます。$[]\&

于 2010-06-17T00:32:44.223 に答える
1

仕様では、どのコンテキストで二重バッククォートでエスケープできる文字が明確にないようです。

あなたの最善の策は、DUケースに標準の識別子を使用し、ToString提案どおりにオーバーライドすることだと思います。

于 2010-06-16T23:36:27.990 に答える