Performance in Python

Simple performance in Python can be measured by the profile module using a command like,

$ python3 -m profile <script.py> {{args to script.py}}

Measuring performance of a simple iteration of Tamil spell checker shows,

python3 -m profile demo.py 
u'இன்பம்',
u'ஆப்பம்',
u'இன்னம்',
u'இன்பன்',
u'அற்பம்',
u'அப்பம்',
u'அற்றம்',
u'அற்கம்',
u'அக்கம்',
u'அட்டம்',
u'அம்மம்',
u'அற்பர்',
u'அப்பன்',
u'அப்பர்',
u'அப்பல்',
u'அம்பர்',
u'அம்பல்',
u'அன்னம்',
u'அன்னன்',
u'அன்னல்',
u'அன்பன்',
L = 21
         3192524 function calls (2736876 primitive calls) in 32.678 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
       39    0.002    0.000    0.022    0.001 :0(__build_class__)
        2    0.000    0.000    0.000    0.000 :0(__contains__)
     17/4    0.000    0.000    0.144    0.036 :0(__import__)
        2    0.000    0.000    0.000    0.000 :0(__new__)
       35    0.000    0.000    0.000    0.000 :0(_fix_co_filename)
        1    0.000    0.000    0.000    0.000 :0(_getframe)
      253    0.001    0.000    0.001    0.000 :0(acquire_lock)
        1    0.000    0.000    0.000    0.000 :0(add)
       94    0.000    0.000    0.000    0.000 :0(allocate_lock)
       44    0.001    0.000    0.002    0.000 :0(any)
   519988    2.090    0.000    2.090    0.000 :0(append)
       11    0.000    0.000    0.000    0.000 :0(bit_length)
        1    0.000    0.000    0.000    0.000 :0(callable)
        4    0.000    0.000    0.000    0.000 :0(cast)
   197036    0.815    0.000    0.815    0.000 :0(chr)
        1    0.000    0.000    0.000    0.000 :0(close)
        1    0.000    0.000    0.000    0.000 :0(cmp_to_key)
        3    0.000    0.000    0.000    0.000 :0(compile)
        1    0.000    0.000    0.000    0.000 :0(create_builtin)
        8    0.005    0.001    0.005    0.001 :0(create_dynamic)
        1    0.000    0.000    0.000    0.000 :0(dir)
       51    0.000    0.000    0.000    0.000 :0(endswith)
     37/1    0.001    0.000   32.675   32.675 :0(exec)
        1    0.000    0.000    0.000    0.000 :0(exec_builtin)
        8    0.000    0.000    0.000    0.000 :0(exec_dynamic)
        1    0.000    0.000    0.000    0.000 :0(exp)
       32    0.000    0.000    0.001    0.000 :0(extend)
       32    0.000    0.000    0.000    0.000 :0(find)
       17    0.000    0.000    0.000    0.000 :0(format)
       70    0.000    0.000    0.000    0.000 :0(from_bytes)
      117    0.001    0.000    0.001    0.000 :0(fspath)
   412207    1.985    0.000    1.985    0.000 :0(get)
      146    0.001    0.000    0.001    0.000 :0(get_ident)
      274    0.001    0.000    0.001    0.000 :0(getattr)
       36    0.001    0.000    0.001    0.000 :0(getcwd)
      168    0.001    0.000    0.001    0.000 :0(getlower)
       14    0.000    0.000    0.000    0.000 :0(globals)
      270    0.001    0.000    0.001    0.000 :0(hasattr)
        1    0.000    0.000    0.000    0.000 :0(index)
       20    0.000    0.000    0.000    0.000 :0(is_builtin)
       44    0.000    0.000    0.000    0.000 :0(is_frozen)
        6    0.000    0.000    0.000    0.000 :0(isidentifier)
      296    0.001    0.000    0.001    0.000 :0(isinstance)
        8    0.000    0.000    0.000    0.000 :0(items)
    64438    0.311    0.000    0.311    0.000 :0(join)
   172718    0.760    0.000    0.760    0.000 :0(keys)
129971/129966    0.664    0.000    0.664    0.000 :0(len)
        5    0.001    0.000    0.001    0.000 :0(listdir)
       35    0.010    0.000    0.010    0.000 :0(loads)
        2    0.000    0.000    0.000    0.000 :0(log)
        1    0.000    0.000    0.000    0.000 :0(lookup)
      101    0.000    0.000    0.000    0.000 :0(lower)
      102    0.000    0.000    0.000    0.000 :0(match)
        4    0.000    0.000    0.000    0.000 :0(max)
       39    0.000    0.000    0.000    0.000 :0(min)
        1    0.000    0.000    0.000    0.000 :0(open)
        1    0.000    0.000    0.000    0.000 :0(openssl_md5)
        1    0.000    0.000    0.000    0.000 :0(openssl_sha1)
        1    0.000    0.000    0.000    0.000 :0(openssl_sha224)
        1    0.000    0.000    0.000    0.000 :0(openssl_sha256)
        1    0.000    0.000    0.000    0.000 :0(openssl_sha384)
        1    0.000    0.000    0.000    0.000 :0(openssl_sha512)
    99429    0.397    0.000    0.397    0.000 :0(ord)
   172717    0.753    0.000    0.753    0.000 :0(pop)
       22    0.001    0.000    0.001    0.000 :0(print)
       37    0.002    0.000    0.002    0.000 :0(read)
      253    0.001    0.000    0.001    0.000 :0(release_lock)
        1    0.000    0.000    0.000    0.000 :0(replace)
        1    0.000    0.000    0.000    0.000 :0(repr)
        1    0.000    0.000    0.000    0.000 :0(rfind)
      354    0.002    0.000    0.002    0.000 :0(rpartition)
      977    0.004    0.000    0.004    0.000 :0(rstrip)
        1    0.000    0.000    0.000    0.000 :0(seed)
       25    0.000    0.000    0.000    0.000 :0(setattr)
        2    0.000    0.000    0.000    0.000 :0(setdefault)
        1    0.003    0.003    0.003    0.003 :0(setprofile)
        2    0.000    0.000    0.000    0.000 :0(sort)
   172718    1.104    0.000    1.104    0.000 :0(sorted)
        9    0.000    0.000    0.000    0.000 :0(split)
        1    0.013    0.013    0.013    0.013 :0(splitlines)
        1    0.000    0.000    0.000    0.000 :0(sqrt)
       14    0.000    0.000    0.000    0.000 :0(startswith)
      187    0.004    0.000    0.004    0.000 :0(stat)
    63896    0.314    0.000    0.314    0.000 :0(strip)
        4    0.000    0.000    0.000    0.000 :0(tolist)
        5    0.000    0.000    0.000    0.000 :0(translate)
        1    0.000    0.000    0.000    0.000 :0(union)
        4    0.000    0.000    0.000    0.000 :0(update)
        1    0.006    0.006    0.006    0.006 :0(utf_8_decode)
       73    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap>:103(release)
       48    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:143(__init__)
       48    0.001    0.000    0.004    0.000 <frozen importlib._bootstrap>:147(__enter__)
       48    0.000    0.000    0.001    0.000 <frozen importlib._bootstrap>:151(__exit__)
       73    0.001    0.000    0.003    0.000 <frozen importlib._bootstrap>:157(_get_module_lock)
       47    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap>:176(cb)
       25    0.000    0.000    0.002    0.000 <frozen importlib._bootstrap>:194(_lock_unlock_module)
     70/4    0.001    0.000    0.149    0.037 <frozen importlib._bootstrap>:211(_call_with_frames_removed)
      488    0.002    0.000    0.002    0.000 <frozen importlib._bootstrap>:222(_verbose_message)
        1    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:232(_requires_builtin_wrapper)
       44    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:307(__init__)
       44    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:311(__enter__)
       44    0.001    0.000    0.002    0.000 <frozen importlib._bootstrap>:318(__exit__)
      176    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap>:321(<genexpr>)
       35    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:35(_new_module)
       45    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:369(__init__)
       78    0.001    0.000    0.006    0.000 <frozen importlib._bootstrap>:403(cached)
       72    0.000    0.000    0.001    0.000 <frozen importlib._bootstrap>:416(parent)
       44    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:424(has_location)
        1    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:433(spec_from_loader)
       44    0.002    0.000    0.010    0.000 <frozen importlib._bootstrap>:504(_init_module_attrs)
       44    0.001    0.000    0.018    0.000 <frozen importlib._bootstrap>:564(module_from_spec)
       47    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap>:58(__init__)
     44/4    0.002    0.000    0.151    0.038 <frozen importlib._bootstrap>:651(_load_unlocked)
       45    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:707(find_spec)
        1    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:728(create_module)
        1    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:736(exec_module)
        1    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:753(is_package)
       73    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap>:78(acquire)
       44    0.000    0.000    0.001    0.000 <frozen importlib._bootstrap>:780(find_spec)
      133    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap>:843(__enter__)
      133    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap>:847(__exit__)
       45    0.002    0.000    0.044    0.001 <frozen importlib._bootstrap>:870(_find_spec)
     48/3    0.001    0.000    0.156    0.052 <frozen importlib._bootstrap>:936(_find_and_load_unlocked)
     48/3    0.002    0.000    0.156    0.052 <frozen importlib._bootstrap>:966(_find_and_load)
    72/24    0.001    0.000    0.139    0.006 <frozen importlib._bootstrap>:997(_handle_fromlist)
        5    0.000    0.000    0.001    0.000 <frozen importlib._bootstrap_external>:1067(_path_hooks)
      106    0.001    0.000    0.003    0.000 <frozen importlib._bootstrap_external>:1080(_path_importer_cache)
       44    0.002    0.000    0.037    0.001 <frozen importlib._bootstrap_external>:1117(_get_spec)
       44    0.000    0.000    0.038    0.001 <frozen importlib._bootstrap_external>:1149(find_spec)
        5    0.000    0.000    0.001    0.000 <frozen importlib._bootstrap_external>:1196(__init__)
       40    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:1202(<genexpr>)
       43    0.001    0.000    0.002    0.000 <frozen importlib._bootstrap_external>:1228(_get_spec)
       89    0.007    0.000    0.031    0.000 <frozen importlib._bootstrap_external>:1233(find_spec)
        5    0.000    0.000    0.002    0.000 <frozen importlib._bootstrap_external>:1281(_fill_cache)
        5    0.000    0.000    0.001    0.000 <frozen importlib._bootstrap_external>:1310(<setcomp>)
        5    0.000    0.000    0.001    0.000 <frozen importlib._bootstrap_external>:1322(path_hook_for_FileFinder)
       70    0.003    0.000    0.009    0.000 <frozen importlib._bootstrap_external>:263(cache_from_source)
       43    0.001    0.000    0.006    0.000 <frozen importlib._bootstrap_external>:361(_get_cached)
       89    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:37(_relax_case)
       35    0.000    0.000    0.001    0.000 <frozen importlib._bootstrap_external>:393(_check_name_wrapper)
       35    0.001    0.000    0.003    0.000 <frozen importlib._bootstrap_external>:430(_validate_bytecode_header)
       35    0.001    0.000    0.011    0.000 <frozen importlib._bootstrap_external>:485(_compile_bytecode)
       70    0.000    0.000    0.001    0.000 <frozen importlib._bootstrap_external>:52(_r_long)
       43    0.001    0.000    0.001    0.000 <frozen importlib._bootstrap_external>:524(spec_from_file_location)
      453    0.005    0.000    0.016    0.000 <frozen importlib._bootstrap_external>:57(_path_join)
      453    0.006    0.000    0.009    0.000 <frozen importlib._bootstrap_external>:59(<listcomp>)
       70    0.001    0.000    0.002    0.000 <frozen importlib._bootstrap_external>:63(_path_split)
       35    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:669(create_module)
     35/4    0.001    0.000    0.149    0.037 <frozen importlib._bootstrap_external>:672(exec_module)
       35    0.002    0.000    0.024    0.001 <frozen importlib._bootstrap_external>:743(get_code)
      187    0.001    0.000    0.005    0.000 <frozen importlib._bootstrap_external>:75(_path_stat)
       35    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:800(__init__)
       35    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:825(get_filename)
       35    0.002    0.000    0.003    0.000 <frozen importlib._bootstrap_external>:830(get_data)
       35    0.000    0.000    0.001    0.000 <frozen importlib._bootstrap_external>:840(path_stats)
       63    0.001    0.000    0.002    0.000 <frozen importlib._bootstrap_external>:85(_path_is_mode_type)
        8    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:908(__init__)
        8    0.000    0.000    0.006    0.001 <frozen importlib._bootstrap_external>:919(create_module)
        8    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:927(exec_module)
       58    0.000    0.000    0.002    0.000 <frozen importlib._bootstrap_external>:94(_path_isfile)
        5    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:99(_path_isdir)
        1    0.000    0.000    0.000    0.000 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 <string>:5(DictionaryWithPredicate)
        1    0.000    0.000    0.000    0.000 TextSummaryExtractor.py:19(SummaryTool)
        1    0.000    0.000    0.000    0.000 TextSummaryExtractor.py:3(<module>)
        1    0.000    0.000    0.000    0.000 __future__.py:48(<module>)
        1    0.000    0.000    0.000    0.000 __future__.py:78(_Feature)
        9    0.000    0.000    0.000    0.000 __future__.py:79(__init__)
        1    0.000    0.000    0.000    0.000 __init__.py:1(<module>)
        1    0.000    0.000    0.004    0.004 __init__.py:3(<module>)
        1    0.000    0.000    0.002    0.002 __init__.py:357(namedtuple)
        2    0.000    0.000    0.023    0.012 __init__.py:4(<module>)
        2    0.000    0.000    0.000    0.000 __init__.py:420(<genexpr>)
        2    0.000    0.000    0.000    0.000 __init__.py:422(<genexpr>)
        1    0.000    0.000    0.120    0.120 __init__.py:6(<module>)
       43    0.000    0.000    0.000    0.000 _compat_pickle.py:165(<genexpr>)
       85    0.000    0.000    0.000    0.000 _compat_pickle.py:167(<genexpr>)
        1    0.000    0.000    0.001    0.001 _compat_pickle.py:9(<module>)
       14    0.000    0.000    0.000    0.000 abc.py:9(abstractmethod)
        1    0.000    0.000    0.003    0.003 bisect.py:1(<module>)
        1    0.000    0.000    0.000    0.000 codecs.py:347(__init__)
        1    0.000    0.000    0.000    0.000 codecs.py:422(__init__)
        1    0.000    0.000    0.007    0.007 codecs.py:450(read)
        1    0.000    0.000    0.020    0.020 codecs.py:603(readlines)
        1    0.000    0.000    0.000    0.000 codecs.py:678(__init__)
        1    0.000    0.000    0.020    0.020 codecs.py:704(readlines)
        1    0.000    0.000    0.000    0.000 codecs.py:744(__enter__)
        1    0.000    0.000    0.000    0.000 codecs.py:747(__exit__)
        1    0.000    0.000    0.000    0.000 codecs.py:862(open)
        5    0.000    0.000    0.000    0.000 copy.py:66(copy)
        1    0.000    0.000    0.000    0.000 datastore.py:115(Node)
   172718    1.404    0.000    1.404    0.000 datastore.py:116(__init__)
        1    0.000    0.000    0.000    0.000 datastore.py:122(DTrie)
        1    0.000    0.000    0.000    0.000 datastore.py:126(__init__)
        1    0.000    0.000    0.000    0.000 datastore.py:14(Queue)
      222    0.003    0.000    0.058    0.000 datastore.py:140(isWord)
      222    0.012    0.000    0.055    0.000 datastore.py:146(isWordAndTrie)
    63896    4.643    0.000   18.098    0.000 datastore.py:178(add)
        1    0.000    0.000    0.000    0.000 datastore.py:236(getAllWordsIterable)
518546/63897    8.297    0.000   11.944    0.000 datastore.py:239(getAllWordsIterableHelper)
        1    0.000    0.000    0.000    0.000 datastore.py:252(RTrie)
        1    0.000    0.000    0.000    0.000 datastore.py:285(TamilTrie)
        1    0.000    0.000    0.016    0.016 datastore.py:4(<module>)
        1    0.000    0.000    0.000    0.000 datastore.py:53(Trie)
        1    0.000    0.000    0.000    0.000 datastore.py:56(__init__)
    64097    0.641    0.000    8.865    0.000 datastore.py:60(get_letters_impl)
        1    0.000    0.000   32.675   32.675 demo.py:5(<module>)
        1    0.000    0.000    0.000    0.000 dictionary.py:111(Agarathi)
        1    0.000    0.000    0.000    0.000 dictionary.py:112(__init__)
    63896    0.657    0.000   18.755    0.000 dictionary.py:139(add)
      222    0.002    0.000    0.060    0.000 dictionary.py:145(isWord)
        1    0.000    0.000    0.000    0.000 dictionary.py:151(getDictionaryPath)
    63897    0.496    0.000   12.440    0.000 dictionary.py:157(getAllWordsIterable)
        1    0.000    0.000    0.000    0.000 dictionary.py:16(Dictionary)
        1    0.000    0.000    0.000    0.000 dictionary.py:170(EmptyAgarathi)
        1    0.000    0.000    0.000    0.000 dictionary.py:174(TamilVU)
        1    0.000    0.000    0.000    0.000 dictionary.py:175(__init__)
        1    0.000    0.000    0.000    0.000 dictionary.py:178(EnglishLinux)
        1    0.000    0.000    0.000    0.000 dictionary.py:189(VatamozhiMonierWilliams)
        1    0.000    0.000    0.000    0.000 dictionary.py:193(ParallelDictionary)
        1    0.000    0.000    0.000    0.000 dictionary.py:210(Madurai)
        1    0.000    0.000    0.000    0.000 dictionary.py:217(Wikipedia)
        1    0.000    0.000    0.000    0.000 dictionary.py:225(DictionaryBuilder)
        1    0.000    0.000   32.416   32.416 dictionary.py:226(create)
        1    0.000    0.000    0.023    0.023 dictionary.py:4(<module>)
        1    0.279    0.279   12.719   12.719 dictionary.py:47(getSize)
        1    0.608    0.608   19.697   19.697 dictionary.py:58(loadWordFile)
        1    0.000    0.000    0.000    0.000 dictionary.py:71(SimpleDictionary)
        1    0.000    0.000    0.014    0.014 encode2unicode.py:23(<module>)
        1    0.005    0.005    0.005    0.005 encode2utf8.py:24(<module>)
      166    0.001    0.000    0.003    0.000 enum.py:265(__call__)
      166    0.001    0.000    0.002    0.000 enum.py:515(__new__)
       33    0.000    0.000    0.000    0.000 enum.py:592(name)
        2    0.000    0.000    0.000    0.000 enum.py:597(value)
        2    0.000    0.000    0.001    0.001 enum.py:758(_missing_)
        2    0.000    0.000    0.001    0.001 enum.py:765(_create_pseudo_member_)
        9    0.000    0.000    0.002    0.000 enum.py:795(__or__)
       74    0.001    0.000    0.003    0.000 enum.py:801(__and__)
       11    0.000    0.000    0.000    0.000 enum.py:820(_high_bit)
        2    0.000    0.000    0.001    0.001 enum.py:837(_decompose)
        2    0.000    0.000    0.001    0.000 enum.py:855(<listcomp>)
        5    0.000    0.000    0.000    0.000 enum.py:866(<lambda>)
       15    0.000    0.000    0.000    0.000 enum.py:872(_power_of_two)
       14    0.000    0.000    0.005    0.000 hashlib.py:116(__get_openssl_constructor)
        1    0.000    0.000    0.010    0.010 hashlib.py:54(<module>)
        8    0.000    0.000    0.004    0.001 hashlib.py:73(__get_builtin_constructor)
        1    0.000    0.000    0.000    0.000 ipaconvert.py:24(<module>)
        1    0.000    0.000    0.003    0.003 numeral.py:5(<module>)
        1    0.000    0.000    0.000    0.000 orddic.py:5(<module>)
        1    0.000    0.000    0.005    0.005 pickle.py:181(<listcomp>)
        1    0.000    0.000    0.000    0.000 pickle.py:184(_Framer)
        1    0.000    0.000    0.000    0.000 pickle.py:220(_Unframer)
        1    0.000    0.000    0.013    0.013 pickle.py:24(<module>)
        1    0.000    0.000    0.000    0.000 pickle.py:345(_Pickler)
        1    0.000    0.000    0.000    0.000 pickle.py:64(PickleError)
        1    0.000    0.000    0.000    0.000 pickle.py:68(PicklingError)
        1    0.000    0.000    0.000    0.000 pickle.py:75(UnpicklingError)
        1    0.000    0.000    0.000    0.000 pickle.py:88(_Stop)
        1    0.000    0.000    0.000    0.000 pickle.py:986(_Unpickler)
        1    0.000    0.000    0.000    0.000 posixpath.py:102(split)
        1    0.000    0.000    0.000    0.000 posixpath.py:329(normpath)
        1    0.000    0.000    0.000    0.000 posixpath.py:367(abspath)
        2    0.000    0.000    0.000    0.000 posixpath.py:39(_get_sep)
        1    0.000    0.000    0.000    0.000 posixpath.py:62(isabs)
        1    0.000    0.000    0.000    0.000 pprint.py:35(<module>)
        1    0.000    0.000    0.000    0.000 pprint.py:72(_safe_key)
        1    0.000    0.000    0.000    0.000 pprint.py:98(PrettyPrinter)
        1    0.000    0.000   32.678   32.678 profile:0(<code object <module> at 0x102c77810, file "demo.py", line 5>)
        0    0.000             0.000          profile:0(profiler)
        1    0.000    0.000    0.000    0.000 qwertykbd.py:9(<module>)
        1    0.000    0.000    0.021    0.021 random.py:38(<module>)
        1    0.000    0.000    0.000    0.000 random.py:663(SystemRandom)
        1    0.000    0.000    0.000    0.000 random.py:71(Random)
        1    0.000    0.000    0.000    0.000 random.py:87(__init__)
        1    0.000    0.000    0.000    0.000 random.py:96(seed)
      102    0.001    0.000    0.004    0.000 re.py:169(match)
        2    0.000    0.000    0.020    0.010 re.py:231(compile)
        1    0.000    0.000    0.000    0.000 re.py:249(escape)
      104    0.001    0.000    0.022    0.000 re.py:286(_compile)
        1    0.000    0.000    0.000    0.000 regexp.py:5(<module>)
        1    0.000    0.000    0.000    0.000 resources.py:10(<listcomp>)
        1    0.000    0.000    0.000    0.000 resources.py:13(get_data_dir)
        1    0.000    0.000    0.000    0.000 resources.py:17(get_data_dictionaries)
        1    0.000    0.000    0.000    0.000 resources.py:28(get_data_categories)
       14    0.000    0.000    0.000    0.000 resources.py:42(mk_path)
        1    0.000    0.000    0.001    0.001 resources.py:5(<module>)
        1    0.000    0.000    0.000    0.000 resources.py:9(_make_dict_with_path)
        1    0.000    0.000    0.000    0.000 santhirules.py:4(<module>)
      164    0.001    0.000    0.002    0.000 sre_compile.py:102(fixup)
        8    0.000    0.000    0.005    0.001 sre_compile.py:223(_compile_charset)
        8    0.002    0.000    0.005    0.001 sre_compile.py:250(_optimize_charset)
        5    0.000    0.000    0.000    0.000 sre_compile.py:376(_mk_bitmap)
        5    0.000    0.000    0.000    0.000 sre_compile.py:378(<listcomp>)
        4    0.000    0.000    0.000    0.000 sre_compile.py:381(_bytes_to_codes)
        4    0.000    0.000    0.000    0.000 sre_compile.py:388(_simple)
        2    0.000    0.000    0.000    0.000 sre_compile.py:414(_get_literal_prefix)
        2    0.000    0.000    0.000    0.000 sre_compile.py:441(_get_charset_prefix)
        3    0.000    0.000    0.001    0.000 sre_compile.py:482(_compile_info)
        6    0.000    0.000    0.000    0.000 sre_compile.py:539(isstring)
        3    0.000    0.000    0.012    0.004 sre_compile.py:542(_code)
        3    0.000    0.000    0.022    0.007 sre_compile.py:557(compile)
     16/3    0.001    0.000    0.011    0.004 sre_compile.py:64(_compile)
       16    0.000    0.000    0.000    0.000 sre_parse.py:111(__init__)
       15    0.000    0.000    0.000    0.000 sre_parse.py:159(__len__)
       48    0.000    0.000    0.001    0.000 sre_parse.py:163(__getitem__)
        4    0.000    0.000    0.000    0.000 sre_parse.py:167(__setitem__)
       18    0.000    0.000    0.000    0.000 sre_parse.py:171(append)
    24/11    0.000    0.000    0.001    0.000 sre_parse.py:173(getwidth)
        3    0.000    0.000    0.000    0.000 sre_parse.py:223(__init__)
      329    0.001    0.000    0.001    0.000 sre_parse.py:232(__next)
       51    0.000    0.000    0.000    0.000 sre_parse.py:248(match)
      270    0.002    0.000    0.003    0.000 sre_parse.py:253(get)
        4    0.000    0.000    0.000    0.000 sre_parse.py:266(getuntil)
       24    0.000    0.000    0.000    0.000 sre_parse.py:285(tell)
        1    0.000    0.000    0.000    0.000 sre_parse.py:287(seek)
        3    0.000    0.000    0.000    0.000 sre_parse.py:342(_escape)
      8/3    0.000    0.000    0.009    0.003 sre_parse.py:407(_parse_sub)
     11/3    0.002    0.000    0.009    0.003 sre_parse.py:470(_parse)
        3    0.000    0.000    0.000    0.000 sre_parse.py:76(__init__)
       14    0.000    0.000    0.000    0.000 sre_parse.py:81(groups)
        3    0.000    0.000    0.001    0.000 sre_parse.py:828(fix_flags)
        4    0.000    0.000    0.000    0.000 sre_parse.py:84(opengroup)
        3    0.000    0.000    0.010    0.003 sre_parse.py:844(parse)
        4    0.000    0.000    0.000    0.000 sre_parse.py:96(closegroup)
        1    0.000    0.000    0.021    0.021 string.py:15(<module>)
        1    0.000    0.000    0.000    0.000 string.py:169(Formatter)
        1    0.000    0.000    0.000    0.000 string.py:55(_TemplateMetaclass)
        1    0.000    0.000    0.020    0.020 string.py:65(__init__)
        1    0.000    0.000    0.000    0.000 string.py:77(Template)
        1    0.001    0.001    0.002    0.002 tace16.py:358(<listcomp>)
        1    0.000    0.000    0.002    0.002 tace16.py:4(<module>)
        1    0.000    0.000    0.000    0.000 tamil99kbd.py:11(<module>)
        1    0.000    0.000    0.000    0.000 transliteration.py:23(<module>)
        1    0.001    0.001    0.002    0.002 tscii.py:13(<module>)
      256    0.001    0.000    0.001    0.000 tscii.py:16(<lambda>)
        1    0.000    0.000    0.000    0.000 tweetparser.py:12(TweetParser)
        1    0.000    0.000    0.000    0.000 tweetparser.py:60(TamilTweetParser)
        1    0.000    0.000    0.004    0.004 tweetparser.py:9(<module>)
       35    0.000    0.000    0.000    0.000 types.py:135(__get__)
        1    0.000    0.000    0.147    0.147 typographical.py:14(<module>)
    632/1    0.026    0.000    0.041    0.041 typographical.py:20(oridam_generate_patterns)
        1    0.001    0.001    0.102    0.102 typographical.py:50(corrections)
        1    0.000    0.000    0.000    0.000 unicode2encode.py:25(<module>)
        1    0.000    0.000    0.003    0.003 unicode2ipa.py:23(<module>)
        1    0.003    0.003    0.031    0.031 utf8.py:11(<module>)
        1    0.000    0.000    0.000    0.000 utf8.py:159(<listcomp>)
      288    0.001    0.000    0.001    0.000 utf8.py:234(uyir_len)
      288    0.001    0.000    0.001    0.000 utf8.py:237(mei_len)
      288    0.003    0.000    0.005    0.000 utf8.py:274(uyirmei_constructed)
    98518    1.125    0.000    1.940    0.000 utf8.py:303(<lambda>)
        4    0.000    0.000    0.000    0.000 utf8.py:384(_make_set)
    64097    4.222    0.000    8.224    0.000 utf8.py:393(get_letters)
        1    0.000    0.000    0.000    0.000 utf8.py:758(CacheGetLettersMixin)
        1    0.000    0.000    0.000    0.000 utf8.py:760(__init__)
    64118    0.895    0.000   10.059    0.000 utf8.py:767(get_letters)
        1    0.000    0.000    0.000    0.000 wordutils.py:310(DictionaryFixedWordList)
        1    0.000    0.000    0.029    0.029 wordutils.py:4(<module>)

Basically, this confirms solthiruthi, and similar search based spellers, as a computational problem for Tamil spell checkers claimed in our paper. Performance is all it takes to make the results better, more accurate and faster.

2021

இணைமதி எழுத்துரு கொண்டு செய்யப்பட்ட தமிழ் அரிச்சுவடி

புத்தாண்டில் பல புதிய வாய்புகள், சந்தர்ப்பங்கள் காத்திருக்கின்றன; நமது திறன்களை வளர்த்துக்கொள்ளவும் வாய்ப்பு உண்டு; சென்ற ஆண்டில் நடப்பில் குறைபாடுகளையும் சீர்மைசெய்ய வாய்ப்பு உண்டு. இன்று எனது பார்வையில், எழில் மொழி அறக்கட்டளையின் பணிகளானது தொடர்ந்து இந்த ஆண்டில் நடைபெரும்:

  1.  சில சிக்கலான தமிழ் மொழிபெயர்ப்புகளை முடிப்பது (compiler பற்றிய கட்டுரை, தமிழில் அல்கொரிதம் பற்றியும் தகவல் தரவமைப்புகள் பற்றியும் புத்தகங்கள்).
  2. நிரல் அளவில் இரண்டு அல்லது மூன்று ஓப்பன் தமிழ் வெளியீடுகளை ஏற்பாடு செய்வது
  3. புதிய திட்டங்கள் அளவில் விட்டர்பீ அல்கொரிதத்தின் வாயிலான தமிழ் சொல்திருத்தி செயல்பாட்டிற்கு தீர்வு காணுதல்.

புடிச்சா புளியங்கொம்பு; முயற்சிகள் வீண்போவதில்லை. சவால்களை சந்திப்போம்.

அன்புடன்

-முத்து