Skip to content

Commit

Permalink
Add number language for digits counting.
Browse files Browse the repository at this point in the history
  • Loading branch information
calfzhou committed Dec 24, 2013
1 parent cfa8d1d commit b72c303
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 3 deletions.
16 changes: 14 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,9 @@ Program Usage
-------------

```
usage: self_descriptive_sentence.py [-h] [-v] [-a ATTEMPTS] [-i ITERATIONS]
[-V] [-0 | -1 | -s SEED]
usage: self_descriptive_sentence.py [-h] [-v] [-l {chinese,number}]
[-a ATTEMPTS] [-i ITERATIONS] [-V]
[-0 | -1 | -s SEED]
[text]
Self-Descriptive Sentence Generator
Expand All @@ -58,6 +59,9 @@ positional arguments:
optional arguments:
-h, --help show this help message and exit
-v, --version show program's version number and exit
-l {chinese,number}, --language {chinese,number}
choose a language to generate sentence (default:
chinese)
-a ATTEMPTS, --attempts ATTEMPTS
the maximum number of attempts (default: 20)
-i ITERATIONS, --iterations ITERATIONS
Expand All @@ -83,3 +87,11 @@ Example
`python self_descriptive_sentence.py -V 我写的这句话`:

我写的这句话一共有七十四个字,二个“我”,二个“写”,二个“的”,二个“这”,二个“句”,二个“话”,二个“共”,二个“有”,二个“字”,五个“一”,十三个“二”,三个“三”,四个“四”,二个“五”,二个“七”,一个“八”,一个“九”,四个“十”,二十一个“个”。

`python self_descriptive_sentence.py -V -l number 1`:

1 employs 11 digits, 4 1's, 3 2's, 2 3's, 2 4's.

`python self_descriptive_sentence.py -V -l number 123`:

123 employs 17 digits, 4 1's, 4 2's, 2 3's, 4 4's, 1 6's, 2 7's.
56 changes: 56 additions & 0 deletions sentence/number.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
from __future__ import print_function, unicode_literals
from sentence_language import SentenceLanguage


class Number(SentenceLanguage):
def __init__(self):
super(Number, self).__init__()

self.__sentence_template = '{{{user}}} employs {{{total}}} digits{{{counting}}}.'.format(
user=self._USER_TEXT_FIELD_NAME, total=self._TOTAL_FIELD_NAME, counting=self._COUNTING_FIELD_NAME
)
""":type: string"""
self.__character_count_template = ', {{{count}}} {{{char}}}\'s'.format(
count=self._COUNT_FIELD_NAME, char=self._CHARACTER_FIELD_NAME
)
""":type: string"""

def is_countable_character(self, character):
"""
:type character: string
:rtype: bool
"""
return ('0' <= character <= '9') if character else False

@property
def special_characters(self):
"""
:rtype: collections.Iterable[string]
"""
return map(str, xrange(10))

def translate_number(self, number):
"""
:type number: int|long
:rtype: string
"""
if not isinstance(number, int) and not isinstance(number, long):
raise ValueError('number must be integer')

return unicode(number)

@property
def _sentence_template(self):
"""
:rtype: string
"""
return self.__sentence_template

@property
def _character_count_template(self):
"""
:rtype: string
"""
return self.__character_count_template

12 changes: 11 additions & 1 deletion sentence/self_descriptive_sentence.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import argparse
import sys
import chinese
import number
from sentence_generator import SentenceGenerator

__version__ = '0.1'
Expand All @@ -17,6 +18,9 @@ def main():
version=__version__
)
parser.add_argument('text', nargs='?', default='', help='a text will be included in the sentence')
parser.add_argument('-l', '--language', default='chinese', choices=('chinese', 'number'),
help='choose a language to generate sentence')

parser.add_argument('-a', '--attempts', type=int, default=SentenceGenerator.MAX_ATTEMPTS,
help='the maximum number of attempts')
parser.add_argument('-i', '--iterations', type=int, default=SentenceGenerator.MAX_ITERATIONS,
Expand All @@ -43,7 +47,13 @@ def main():
else:
down_to_zero = args.seed

language = chinese.Chinese()
if args.language == 'chinese':
language = chinese.Chinese()
elif args.language == 'number':
language = number.Number()
else:
raise ValueError('unknown language {}'.format(args.language))

counts = SentenceGenerator.generate(language, user_text=args.text,
attempts=args.attempts, iterations=args.iterations,
down_to_zero=down_to_zero, verbose=not args.no_verbose)
Expand Down

0 comments on commit b72c303

Please sign in to comment.