有一些输入格式及其相应的输出
1. 7 years 10 months ---> YRS:7 MNHS:10
2. 7 kgs 10 grms ---> KGS:7 GRMS:10
3. 7 kilograms 10 grams ---> KGS:7 GRMS:10
4. 7 thousand 9 hundread ---> 7900
5. seven years ten months --> YRS:7 MNHS:10
6. seven kgs ten grms ---> KGS:7 GRMS:10
7. triple seven double five --> 77755
我通过在** HashMap 中存储信息为所有人编写了单独的模块。它工作正常。**
然后我需要编写一个主模块,其中输入是一个句子(话语),我需要将所有上面的子串替换为相应的子串输出。
例如,
输入: - 拨号三联八联三有三九八。
输出: - 拨号号码888444398。
和许多这样的话语。
我的疑惑:
我使用了较小模块的HashMap数来存储键的含义,就像 - 三重意味着3次,双重意味着2次全部。但这有限制,如果我需要添加任何东西,我必须在HashMap中添加该条目。 为此建议一些好的技巧。
我在主模块中感到困惑,如何从给定的话语中提取上面例子中给出的有用子字符串。 所以也建议一些好的技巧。
Project Lanuguage:Java。
答案 0 :(得分:1)
你应该看看Illinos Quantifier包装:
http://cogcomp.cs.illinois.edu/page/software_view/Quantifier
答案 1 :(得分:0)
您可能想要使用某种formal grammar parser。只是设计语法可以清除问题的视图。在最简单的情况下,您的语法可能如下所示:
STRING -> "" | STRING MEASUREMENT | STRING NUMBER | STRING WORD
MEASUREMENT -> NUMBER UNITS
UNITS -> kgs | grms | years | months | ...
NUMBER -> THOUSAND HUNDRED NUMBER_BELOW_HUNDRED | THOUSAND HUNDRED
THOUSAND -> "" | NUMBER_BELOW_HUNDRED thousand
HUNDRED -> "" | NUMBER_BELOW_HUNDRED hundred
NUMBER_BELOW_HUNDRED -> one | two | three | ... | ninety nine | 99 | 98 | ... | 1
WORD -> /* all other */
您可以自己编写解析器(在这种情况下看起来非常简单)或使用像Bison / Flex这样的现成解决方案。
HashMaps的常用替代方法是configuration files。