Я пытаюсь создать размеченное объединение для части речевых тегов и других меток, возвращаемых анализатором естественного языка.
В 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 для этих глупых случаев и заменить символы каким-нибудь буквенно-цифровым эквивалентом?