GSoC/2015/Project ideas

Apart from the following ideas, you can propose your own ideas

=Potential Mentors=
 * 1) Baiju M (baijum on irc.freenode.net)
 * 2) Santhosh Thottingal (santhosh on irc.freenode.net)
 * 3) Sayamindu Das Gupta (unmadinduon irc.freenode.net)
 * 4) Rajeesh K Nambiar (rajeesh on irc.freenode.net)
 * 5) Vasudev Kammath (copyninja on irc.freenode.net)
 * 6) Jishnu Mohan (jishnu7 on irc.freenode.net)
 * 7) Navaneeth (nkn__ on irc.freenode.net)
 * 8) Nandaja Varma (gem on irc.freenode.net)
 * 9) Praveen A (j4v4m4n on irc.freenode.net)
 * 10) Ershad K (ershad on irc.freenode.net)
 * 11) Samuel Thibault (youpi on irc.freenode.net)
 * 12) Anivar Aravind (anivar on irc.freenode.net)
 * 13) Hrishikesh K.B (stultus on irc.freenode.net)
 * 14) Nishan Naseer (nishan on irc.freenode.net)

=Ideas for Google Summer of Code 2015=
 * Please Read the FAQ
 * If you want to propose an idea, please do it in student projects mailing list of Swathanthra Malayalam computing

=Projects with confirmed mentors=

ibus-braille module modifications
Projectː

This project will be to make improvements on the project that was successfully completed by a student under SMC. The remaining tasks areː
 * 1) Integrate Ibus-Braille with Liblouis
 * 2) Create Table editor for Liblouis
 * 3) Create a web version and host it.
 * 4) Add more indian languages to Liblouis
 * 5) Add facility to write direct braille Unicode characters
 * 6) Remove espeak dependency and make accessible via orca itself.

Complexity:

Confirmed Mentor: Samuel Thibault

How to contact the mentor: IRC - youpi on #smc-project on Freenode

Expertise required:

What the student will learn

Varnam Android Keyboard
Project:

Add support for varnamproject into android and have a native keyboard like indic keyboard. It can be integrated into Indic keyboard or have it as a separate keyboard.

Complexity: Advanced

Confirmed Mentor: Navaneeth K. N.

How to contact the mentor: IRC - nkn__ on #smc-project on Freenode

Expertise required:

What the student will learn

=Projects with unconfirmed mentors=

A spell checker for Indic language that understands inflections
Project:

libindic project has a spellchecker written using python with a not so simple algorithm. But still it is not capable of handling inflection and agglutination occurring in Indian languages especially south Indian languages. The dictionary we have for Malayalam spellchecker have about 150000 words. Of course we can expand the dictionary, but that doesn't have much value since words can be formed in Malayalam or Tamil etc by joining multiple words. In addition to that, words get inflected based on grammar forms(sandhi), plural, gender etc. Hunspell has a system to handle this, but so far nobody succeeded in getting it working for multi level suffix stripping as required for Malayalam. Some times a Malayalam word can be formed by more than 5 words joining together. We will need a word splitting logic or a table taking care of all patterns. The project is to attempt solving this with hunspell. If that is not feasible(hunspell upstream is not active), develop an algorithm and implement it.

Recently Tamil attempted developing a spellchecker using Hunspell with multi level suffix stripping. You can see the result here https://github.com/thamizha/solthiruthi. Our attempt should be first to use Hunspell to achieve spellchecking with agglutination and inflection. Probably it will require lot of scripting to generate suffix patterns, we can ask help from existing language communities too. If Hunspell has limitation with multi level suffxes- sometimes Indian languages require more than 5 levels of suffix stripping, we need to document it(bug and documentation) and try to attempt python based solution on top of libindic framework.

The project is not about coding an existing algorithm, but to develop and implement an algorithm.

Hunspell's limitations can be understood from this conversation we had with the author of Hunspell in 2008

Homework to do before submitting applications:
 * 1) Use Hunspell in any Indian language like Malayalam for spell correction in editors or word processors and understand the limitations
 * 2) Study the nature of inflection and agglutination in Indian languages, read existing documents on this(ask for documents too) and note down your observations
 * 3) Study Hunspell and other spellcheckers to see how this problem is addressed
 * 4) Understand how a spell checker works. How to write a spellchecker from scratch?
 * 5) Come up with a plan about addressing the issue.


 * Savannah Task

Complexity: Advanced

Confirmed Mentor:

How to contact the mentor:

Expertise required: Average level understanding of grammar system of at least one Indian language and complete the homework as listed above.

What the student will learn:

Indic rendering support in ConTeXt
Project:

ConTeXt is another TeX macro system similar to LaTeX but much more suitable for design. To find more information about ConTeXt, see the wiki http://wiki.contextgarden.net/Main_Page. ConTeXt MKII have Indic language rendering support using XeTeX. but MKII is deprecated, and the new MKIV backend doesn't support Indic rendering yet. The aim of this project is to add support to Inidic rendering to ConTeXt MKIV. XeTeX is using Harfbuzz to do correct Indic rendering.

More Details: A partially working patch by Rajeesh for MKIV lua code is available. ConTeXt mkii (deprecated) can work with XeTeX backend for Indic rendering. Here is a sample file: \usemodule[simplefonts] \definefontfeature[malayalam][script=mlym] \setmainfont[Rachana][features=malayalam] \starttext മലയാളം \TeX ഉപയോഗിച്ച് ടൈപ്പ്സെറ്റ് ചെയ്തത് \stoptext Generate the output using command texexec --xetex 


 * Savannah Task

Complexity : Advanced

Confirmed Mentor :

How to contact the mentor:

Expertise required: Understanding of the TeX system, experience in either LaTeX or ConTeXt and basic understanding of Indic language rendering. MKIV uses Lua, familiarity with Lua, opentype specifications or Harfbuzz will be added advantage.

What the students will learn:

Language model and Acoustic model for Malayalam language for speech recognition system in CMU Sphinx
Project:

CMU Sphinx is a large vocabulary, speaker independent speech recognition codebase and suite of tools, which can be used to develop speech recognition system in any language. To develop an automatic speech recognition system in a language, acoustic model and language model has to framed for that particular language. Acoustic models characterize how sound changes over time. It captures the characteristics of basic recognition units. The language model describes the likelihood, probability, or penalty taken when a sequence or collection of words is seen. It attempts to convey behavior of the language and tries to predict the occurrence of specific word sequences possible in the language. Once these two models are developed, it will be useful to every one doing research in speech processing. For Indian languages Hindi, Tamil, Telugu and Marati, ASR systems have been developed using sphinx engine. In this project work is aimed at developing acoustic model and language model for Malayalam.

Background Reading
 * 'Development of Indian Language Speech Databases for Large Vocabulary Speech Recognition Systems', Gopalakrishna Anumanchipalli, Rahul Chitturi, Sachin Joshi, Rohit Kumar, Satinder Pal Singh, R.N.V. Sitaram, S P Kishore
 * "Automatic Pronunciation Evaluation And Mispronunciation Detection Using CMUSphinx", Ronanki Srikanth, James Salsman
 * http://www.speech.cs.cmu.edu/
 * http://cmusphinx.sourceforge.net/wiki/tutorial
 * "HTK Based Telugu Speech Recognition", P. Vijai Bhaskar, AVNIET ,Hyderabad, Prof. Dr. S. Rama Mohan Rao, A.Gopi
 * "Design and Development of an Automatic Speech Recognition System for Urdu", Agha Ali Raza,  M.Sc. Thesis, FAST‐National University of Computer and Emerging Sciences
 * "Investigation Arabic Speech Recognition Using CMU Sphinx System", Hassan Satori1, 2, Hussein Hiyassat3, Mostafa Harti1, 2, and Noureddine Chenfour
 * "Understanding the CMU Sphinx Speech Recognition System", Chun-Feng Liao

Complexity :

Confirmed Mentor :

How to contact the mentor:

Expertise required:

What the students will learn:

libindic Project Improvements
Project:

This is set of ideas needed to improve the existing libindic infrastructure. We have decided following tasks as part of this project


 * 1) Provide REST API to libindic without disturbing existing JSONRPC API
 * 2) Improve the Transliteration module
 * 3) Integrate Flask Webfonts extension with libindic to provide Webfonts support.

Provide REST like API for libindic
libindic provides JSONRPC API currently which is also utilized by the templates of framework. JSONRPC is not well supported in all languages and results in NIH code. So we would like to provide REST like HTTP based API's for libindic and at the same time leave the current JSONRPC code untouched for backward compatibility reasons.

Objectives:


 * Develop module or use existing module to provide REST like API's
 * API should support GET and POST. When to use GET?.

Many people have doubt on how the API should look like. We can give twitter API (https://dev.twitter.com/docs/api) as example Sample API calls : -   POST api.silpa.org.in/payyans/ASCII2Unicode Paramets: text, font Response: JSON data -   POST api.silpa.org.in/payyans/Unicode2ASCII Paramets: text, font Response: JSON data - Generic: GET/POST (http://api.silpa.org.in/module/function_name or http://silpa.org.in/api/module/function_name) Parameters: function parameters Response: JSON encoded return value from function

Improve Transliteration module
We have a Transliteration module which supports transliteration from any Indic language to other Indic language and also support to English to Indic and Indic to English transliteration. Also we support IPA and ISO15919 transliteration system. But the module isn't in perfect shape and has lot of bugs. With this idea we would like to improve the following parts


 * 1) Improve cross indic language transliteration system. Currently only Malayalam and Kannada are working without any external language support, all other Indian languages are first transliterated to Malayalam and then transliterated to target Indic language. We want to remove this cycle from source -> Malayalam -> target.
 * 2) English to IPA transliteration is currently broken and this needs to be fixed. See IPA transliteration bug.
 * 3) Once the IPA transliteration issue above is fixed, imporve English to Indic transliteration system using IPA. Currently English to Indic transliteration system is done using CMU Sphinx dictionary which is having limited set of words which inturn limits the output of English to Indic transliteration system.
 * 4) Improve IS015919 to Indic transliteration system see IS015919 to Indic transliteration.

CLDR has transliteration data for Indic languages. We can explore it and see the feasibility. For an intermediate representation of the scripts either IPA can be used or ISO 15919 standard can be used. All these must be supplemented with exception rules and special case handling to achieve more perfect result.

Integrating flask-webfonts extension with libindic
libindic used to have a Webfonts module for serving Indian language fonts as Webfonts for browsers. During GSOC 2013 it was separated as an extension to Flask framework which can be generally used with any Flask powered app. The current code can be found at. The module is not fine tuned yet so below are the objectives.


 * 1) The module is not yet fine tuned and using it will make other modules break. This needs to be fixed (Can be checked with 'webfonts' branch of libindic code on github.
 * 2) Write tests to check the functionalities.
 * 3) Adhere to Flask extension guidelines and submit the modules to Flask extensions directory.
 * 4) Write a tool which can take a directory containing fonts file or single font file and generate configuration file needed by the extension. (A possible such tool which is outdated can be found at )
 * 5) Provide HTTP api's through flask extension which can expose the CSS for applications.

For all tasks above we expect documentation, test cases from the students as deliverable.

Complexity : Intermediate

Confirmed Mentors :

How to contact the mentors:

Mailing List: silpa-discuss@nongnu.org

Expertise required: Python, Flask , Jinja , HTML, Javascript

What the students will learn:


 * 1) Writing applications using Flask
 * 2) Various Transliteration system knolwedge
 * 3) Webfonts knowledge and writing extensions for Flask
 * 4) Test drive development.

Converting indic processing modules currently in libindic into javascript modules library
Project:

Port some of the libindic algorithms to node modules. Several modules, alogorithms in libindic project is done in python now. But porting them to javascript helps developers. For example, cross language transliteration can be done javascript too if we port the algorithm and transliteration rules. Similarly the approximate search can be ported. A flexibile fuzzy search on the web pages will be possible if we have the algorithm in javascript.

Proposed javascript module pattern is https://github.com/umdjs/umd

Student proposals should have a list of alogorithms planning to port, planned demo applications, planned documentation details, and publishing details(Example: npm registry)

Complexity :

Confirmed Mentor :

How to contact the mentor:

 Mailing List: silpa-discuss@nongnu.org

Expertise required: javascript, python

What the students will learn:

Integrate Varnam into libindic
Create a libindic module which hosts varnam. This includes making a python port for libvarnam and making a libindic module which uses the python port.

Complexity : Medium

Confirmed Mentor :

How to contact the mentor:

 Mailing List: silpa-discuss@nongnu.org

Expertise required: C, Python

Varnam Based
Varnam is a cross-platform predictive transliterator for Indian languages. It works mostly like Google's transliterate, but shows key differences in the way word tokenization is done. It has a learning system built in which allows Varnam to make smart predictions.

There are varnam clients available as Firefox] & Chrome addon and an IBus engine.

To try out Varnam, navigate to ]. Currently it support Hindi and Malayalam.


 * FAQ
 * Documentation
 * Contributors guide & ideas to work on

Apart from the following ideas, you can propose your own idea.

Programming language bindings & varnam-daemon
Varnam is written on C which makes interoperability with other languages easy. There are language bindings available for `NodeJs` and `Ruby`. Supporting Varnam in multiple languages allows projects to use varnam easily to enable Indian language input.

To make using varnam from different languages easier, make a cross platform standalone process which uses `libvarnam` shared library and exposes a RPC API over network. This allows any programming language with a socket support can be used with libvarnam. This also makes language bindings fairly easy because they don't have to work with the native interoperability support. The protocol can be a simple text based protocol for all the commands that `libvarnam` supports.

Complexity : Advanced

Confirmed Mentor :

How to contact the mentor:

Expertise required: C

Improvements to the REST API
Project:

This includes rewrite of the current implementation in `golang` and add support for WebSockets to improve the input experience. This also includes making scripts that would ease embedding input on any webpage. All the changes done will go live on[1]

Complexity : Advanced

Confirmed Mentor :

How to contact the mentor:

Expertise required: Basic understanding of golang and C

What the students will learn:

Create an Android IME
Varnam will be ported as a libindic module and it will be available on Android as part of the android SDK project which libindic has proposed. This idea is merged to the libindic project ideas.

Enable varnam's suggestions system to be used from Inscript or any other input system
Varnam has knowledge about lot of words. This idea proposes a method to use these words and provide suggestions for other input systems. Basically, in Varnam, the API call will be something like,

This will fetch all the suggestions which has the given prefix.

`varnam_get_suggestions` needs to keep track of the previous words and use n-gram based dataset to filter the results. This should also learn the words back into the word corpus that varnam is using. Filtering suggestions won't be just a prefix search, but it will have knowledge about how text can be written in the target language and provide smart filtering. Searching in a large corpus and providing real-time suggestions makes this a challenging task.

Once this is implemented in `libvarnam`, it can be used in the ibus-engine.

Complexity : Advanced

Expertise required: C, Unicode & encodings

Confirmed Mentor :

How to contact the mentor:

Word corpus synchronization
Project:

Create a cross-platform synchronization tool which can upload/download the word corpus from offline IMEs like varnam-ibus[2]. This helps to build the online words corpus easily.

Complexity : Medium

Confirmed Mentor :

How to contact the mentor:

Expertise required: Knowledge in C/golang

What the students will learn:


 * [1]: http://www.varnamproject.com
 * [2]: https://gitorious.org/varnamproject/libvarnam-ibus/

Adding MARC21 import/export feature in Grandham
We need a feature in Grandham to import and parse data from MARC21 documents. We should also be able to export existing data in MARC21.

Complexity : High

Confirmed Mentor :

How to contact the mentor:

Expertise required: Knowledge in Ruby/Ruby on Rails

What the students will learn:


 * [1]: http://dev.grandham.org
 * [2]: https://github.com/smc/grandham