Я пытаюсь создать различающееся объединение для части речевых тегов и других меток, возвращаемых синтаксическим анализатором естественного языка.
Обычно в C # / Java для них используются либо строки, либо перечисления, но в F # более подходящими являются дискриминационные объединения, потому что это разные значения только для чтения.
В справочнике по языку я обнаружил, что этот символ
``...``
может использоваться для разделения ключевых слов / зарезервированных слов. Это работает для
type ArgumentType =<br>
| A0 // subject<br>
| A1 // indirect object<br>
| A2 // direct object<br>
| A3 //<br>
| A4 //<br>
| A5 //<br>
| AA //<br>
| ``AM-ADV``
Однако теги содержат такие символы, как $, например,
type PosTag =<br>
| CC // Coordinating conjunction<br>
| CD // Cardinal Number<br>
| DT // Determiner<br>
| EX // Existential there<br>
| FW // Foreign Word<br>
| IN // Preposision or subordinating conjunction<br>
| JJ // Adjective<br>
| JJR // Adjective, comparative<br>
| JJS // Adjective, superlative<br>
| LS // List Item Marker<br>
| MD // Modal<br>
| NN // Noun, singular or mass<br>
| NNP // Proper Noun, singular<br>
| NNPS // Proper Noun, plural<br>
| NNS // Noun, plural<br>
| PDT // Predeterminer<br>
| POS // Possessive Ending<br>
| PRP // Personal Pronoun<br>
| PRP$ //$ Possessive Pronoun<br>
| RB // Adverb<br>
| RBR // Adverb, comparative<br>
| RBS // Adverb, superlative<br>
| RP // Particle<br>
| SYM // Symbol<br>
| TO // to<br>
| UH // Interjection<br>
| VB // Verb, base form<br>
| VBD // Verb, past tense<br>
| VBG // Verb, gerund or persent participle<br>
| VBN // Verb, past participle<br>
| VBP // Verb, non-3rd person singular present<br>
| VBZ // Verb, 3rd person singular present<br>
| WDT // Wh-determiner<br>
| WP // Wh-pronoun<br>
| WP$ //$ Possessive wh-pronoun<br>
| WRB // Wh-adverb<br>
| ``#``<br>
| ``$``<br>
| ``''``<br>
| ``(``<br>
| ``)``<br>
| ``,``<br>
| ``.``<br>
| ``:``<br>
| `` //not sure how to escape/delimit this
``...``
не работает для WP $ или символов типа (
Кроме того, у меня есть интересная проблема, заключающаяся в том, что синтаксический анализатор возвращает `` в качестве значимого символа, поэтому мне также необходимо его избежать.
Есть ли другой способ сделать это, или это просто невозможно с дискриминационным союзом?
Сейчас я получаю сообщения об ошибках типа
- Неверное имя пространства, имени модуля, типа или объединенного регистра
- Дискриминационные случаи объединения и ярлыки исключений должны быть в верхнем регистре.
Полагаю, я мог бы как-то переопределить toString для этих глупых случаев и заменить символы каким-либо буквенно-цифровым эквивалентом?