Last year, one of our Math teachers threw a insult at our class. He said, "you see, you all have this abundance of knowledge, but no willpower to do anything. You guys have all these 'ideas' but never do anything with them, and one day, you'll forget it, and it will be lost forever." So for this year's hackathon we created the ultimate database for ideas and the easiest way to get inspiration. And sometimes, even if we wanted to make an idea into the next blockbuster project, we can't because maybe as a programmer we lack the skills of film making. However, this way, people from many different backgrounds and skill sets can find and give ideas to anyone else in the world. Just think about our wildest dreams becoming video games or that one thing your math teacher said, becoming a web app.
What it does
There are 2 parts to IdeaShare.
First of all, people can use the search bar on the top of the page to describe the type of project they are interested in. The website uses natural language processing to find out keywords from the user's description, and looks for the most relevant. For additional user friendliness, the form provides live update on the keywords found as well as the current most relevant result.
People can also submit their ideas to the website by filling out the form below the search bar. They need to provide a brief description of their project, Similar to searching, the website will provide live updates on the keywords found in the description and also allows the user to add/remove the auto-generated tags.
How we built it
The project was split into 2 parts due to 2 people working on it at the same time. All the data processing is done at the back-end, and an API is provided to the front-end to acquire the necessary information to display the page.
For the linguistic analysis feature, We am using 2 data sources: Google Natural Language API as well as TextRazor. We found that either of the APIs cannot provide the complete information that is required for the analysis and combining them will yield much more effective information.
Challenges we ran into
One of the most difficult part of implementing this project is the searching functionality, where We need to present the most relevant result to the user despite the fact that the query is worded differently.
To accomplish that, We need to come up with a rating algorithm that takes the query and one of the entries from the database and decide the relevance between the two, represented as a number. To do so, We need to think about the algorithms and data structures that We already know, and try to incorporate them into the project.
After many hours of thinking, We had come up with an algorithm that uses the Maximum Weighted Bipartite Matching algorithm to try to "pair" the concepts in the query and the ones in the entries. The relevance score comes from both the number of matches formed as well as the similarities between those pairs. It later came out to be quite effective after some testing.
Accomplishments that we're proud of
This is the first time for both of us to participate in a hackathon with a team size of 2 people. This project is also a bit more complex than the previous projects I have worked on.
The greatest accomplishment for our team would be.... we finished.
What we learned
Before the hackathon, Google's API (Apps Engine / Compute) seemed impossible to use because of the complexity of many aspects of the APIs, including authentication, permissions, activities, and a lot more things. Thanks to the Google booth, I have learnt and successfully implemented the Google Natural Language processing API in my application to parse the data from the users.
Thanks Google :)
What's next for IdeaShare
The current algorithm for searching is a bit inefficient (O(V^2 log V)), which will run for more than 5 second when V is larger than 8700. There is currently a known way that is more efficient, but due to the lack of time as well as the difficulty of implementation of said algorithm.
Given more time, we would also implement a forum system where people can vote on the quality and practicality of the ideas.