2010-06-16 48 views
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这些愚蠢的情况下,代之以符号一些字母数字等值?

+0

为什么不简单地使用一个适合的命名约定,而不是使用解析器中的文字? – 2010-06-19 10:50:04

回答

1

该规范似乎并不清楚哪些字符在什么情况下可以在双引号内转义。

我认为你最好的选择是使用标准标识符作为DU病例,并根据你的建议覆盖ToString

1

根据我的经验,双反标记标识符/似乎完全支持只允许绑定或类型成员。这意味着你可以放置任何字符序列(除了为F#codegen保留的@字符外)。

当你想在模块,类型或DU案例定义中使用它们作为标识符时,由于某些字符不受支持,因此它不会很好。

E.g. ./*+$[],或\产生& “无效的命名空间,模块,类型或联合案例名称” 错误。