Language learning program, word recognition and comparing - c#

I'm trying to create polish/english language learning program.
I'm using C#, and ideally would like to support Windows XP, Vista and (obviously) newer versions.
At the beginning, computer selects some random polish/english word, and "says" it. Program user is then expected to say the same word, but in another language, and program evaluates his correctness. If user said correct word, he is granted a point, otherwise he loses a point.
My first idea was to use speech-to-text library (like System.Speech), but it turns out that
polish language is not very well supported
- speech-to-text is (afaik) not optimized for comparing words
Is there a better way to do it?
Do you know about any library that can do such thing? (Ideally managed library, but im ok with creating my own C# wrapper around unmanaged code).
Is there a name for the thing i want to achieve? (comparing spoken words)
Should I stick to speech-to-text libraries or find another algorithm?
I really tried to google solution, but i wasn't sure after which keyword should i search for. Best i could find was this thread: Language learning speech recognition tools. Solution presented there kind of works for me, but is problematic to deploy (i want a standalone application, with minimum installation) and testing 'correctness' of word that way is a bit weird (i am only 'recognising' single word).
Any help would be really appreciated. Sorry for my poor English.

You might want to read about speech recognition using neural network if you intend to do some work in this area.

Related

How to recognize adjectives in speech?

For a project, I would like to have people talk in front of a Kinect (v1) and every adjective they say should appear on a screen.
Unfortunately, I'm new to Kinect development and I'm having real trouble finding good documentation and tutorials.
I did some testing of the idea, but the best I could do is hack one of the Kinect SDK samples for basic speech recognition and put some adjectives in the grammar.
The problem is that this doesn't work well when saying full sentences in front of the Kinect, and you have to speak pretty loudly and close to the Kinect. I will not be able to place the Kinect that close to the speaker.
I've also tried using System.Speech and (like the sample) Microsoft.Speech. However, none of them seem to support the Dictation grammar. I did some research on what the error (Grammar referenced by grammar not found) means, and it seems this indicates that the dictating functionality is not installed on my system, or something similar. I don't know how to proceed from here.
Can you point me to some other things I could try to recognize the adjectives people are saying in front of a Kinect (or another microphone)?
I ended up using the grammar-based speech recognition which I simply prefilled with a lot of adjectives. Users were limited to saying one word at a time, instead of being able to speak freely, but I couldn't make it work otherwise.

Comprehensive tutorial for beginners on how to write Windows GUI programs

I'm trying to learn how to write Windows GUI* programs in C++, using Visual Studio 2008, but I haven't found any more comprehensive tutorial for beginners.
The more comprehensive tutorials I have found are either only about how to make buttons, menus, etc. OR only about how to write basic C++ console programs.
What I haven't found is a more comprehensive tutorial for beginners on how to combine buttons, menus, etc. with C++ code.
In other words, I'm looking for answers to the question: How do I link menus, buttons etc. to C++ code?
If you know where I can find answers to that question, post them here, please!
Note: "Graphical User Interface (GUI): Includes such things as icons, panels, and interactive windows, to enable users to perform such actions as opening files and creating applications with the click of the mouse" (intoweb.co.za/et-linux-tips.html).
I'm currently reading a C# tutorial at techotopia.com, that seems to include not only C# basics but also useful information on how to use C# to get buttons, menus. etc. to actually do something. I only started reading the tutorial, though, so how useful it actually is I don't know yet.
I've now finished reading the C# tutorial at techotopia.com and learned some basic facts about how to actually make controls on a windows form do something. Had I known what I now know about C# earlier, I most likely would have chosen to learn that language before I started learning C++.
It's beyond me why each and every C++ GUI programs tutorial for beginners aren't written in the same style as the tutorials at techotopia.com. I see no reason why C++ GUI programs tutorials for beginners can't be both crammed with basic facts AND explain even the simplest things to people like me, that need such explanations to understand a new subject. Well, there probably are such tuturials, only I haven't found them.
Now is the time, I think, to make a short list of what steps I have taken to get where I am today when it comes to computer skills in general and ability to write computer programs in particular. I'm posting the list here for the benefit of people who wants to become good at writing computer programs but don't know how to reach that goal or have mislead themselves, as I have time and time again. It's not a final list in any way. It's just a short account of what have worked for me.
Step 1. Use lots of computer programs (word processors, image editors and what else you're interested in) to see what can be done with a computer.
Step 2. Write web pages with HTML and CSS. HTML, Hypertext Markupup Language, are used to tell browsers things like the beginning and end of paragraphs, the structure of tables and where to include images. CSS, Cascading Style Sheets, are used to add things like text-size and background-color to web pages.
Step 3. Improve your web pages with PHP. PHP, Hypertext Preprocessor, reminds of C# and C++ and is a server-side scripting language. Server-side means that something is done to a web page before it is sent to a visitor's browser, like adding code that makes it possible to send a message. PHP is easier for a beginner than C# and C++. Also, if you have written some HTML pages, you can gradually add PHP to these pages. In other words, you can learn how to use PHP in a familiar context.
Step 4. Learn C#. Reminds of PHP and C++. More difficult for a beginner than PHP but easier than C++. This is where I am right now. These links may be of at least some use:
Quick And Dirty Guide To Migrating PHP Code To C#
C# Station C# Tutorial on how to write console programs
dotnetperls.com
George Shepherd's Windows Forms FAQ
C# Corner
csharp-examples.net/examples (very short code snippets)
Visual C# at msdn.microsoft.com (probably more useful when you're no longer an absolute beginner; at least I think so)
Some basic C# tutorials (written by me and not amongst the best tutorials you can find; however, I would have found a page similar to this one useful when I first started learning C#)
Step 5. Learn C++. Reminds of PHP and C#. More difficult for a beginner than PHP and C#. Allows the programmer to control more than C#. Some people say it's faster than C#, while other people don't. This is where I hopefully will be within a year or so.
Since there are as many roads as there are budding programmers, these steps may not be right for you. Hopefully, though, the list above is of at least some assistence to you when you decide what steps to take to reach your goal.
If you know more about programming than I do and disagree with the list above, feel free to provide your own list. If you do, I think you should also explain why you think your list is better.
Charles Petzold wrote a book on that.
I haven't read it, but his Win32 UI book is widely known as hilarious, so it is expected to be good for beginners.
As you can probably already tell from other answers and comments, the term "Windows Forms" is the name for a specific .NET technology.
You seem to want to ask a question more along line of how to learn to write Windows programs that have a GUI (menus, buttons, windows, etc).
There is no single way to write a Windows program. C++ itself doesn't know anything about Windows. Instead you will end up using some API or framework. So what you need to do is choose which particular one you want to use and then learn that.
At the lowest level there is the raw
Windows API. However it is a very
C-like interface and few people would
recommend starting there.
Microsoft's C++ based framework for building Windows programs is MFC (Microsoft Foundation Classes). It was created long before .NET and C++/CLI and such. Being so old, there are aspects of it that haven't been able to change to keep with the times and so some people don't like it. But it's still supported and used. In fact, if you have a full version (not an express version) of Visual Studio then you already have MFC available.
There are various other C++ frameworks that have come along more recently. Qt and WxWidgets are a couple of the bigger names. Many of these not only give you a way to create Windows programs, but also try to abstract away all the OS-specific details so that your code can be compiled to work on other OS's (like Linux or Mac) too. In my opinion, these are often more pleasant to work with than MFC once you learn how.
Even though its not what you're asking for, many people would actually recommend using C# and .NET for making GUI programs in Windows. There are some nice aspects of that language and framework that make GUI programming easier.
So you probably need to do a little investigation to determine what technology you actually want to learn and use. Then you can go searching for appropriate tutorials.
A somewhat old thread but here's what could arguably be the updated Petzold replacement:
"Windows System Programming (4th Edition) (Addison-Wesley Microsoft Technology Series)"

Spellchecker for windows forms in .NET

I am looking for a third party component that could handle spellchecking for Windows forms (.Net 2.0 or .NET 3.5) I have the following requirement:
The component should be able to use Open office dictionary (Need to use a Swedish dic I think the OO is the best one)
Be able to underline in the UI while typing, like word. (Don’t want to implement this by myself)
Be able to underline in a simple textbox not just rich textbox. (Don’t want to change to much in the legacy code)
Be able to use customized dictionary so I can use both the OO dictionary and my own textfiles with words at the same time.
I have found a spellchecker that do all this things and that is XtraSpellchecker from Devexpress the only problem is that its not spelling correctly for some words with Swedish OO-dictionary . Its not the OO dictionary that is the problem because the dictionary work fine with NHunspell.
I may fix this small bug if I buy the component with source from devexpress but its hard to convince management to buy something that they don’t know if it will work or not. I have asked on devexpress forum if it’s a bug but waiting for response.
There is one “maybe” requirement also and that’s management probably want to have a spellchecker for WPF too and its always good if I can get both WPF/Win Form from the same vendor. I can not use the built in spellchecker in WPF because there is no Swedish dictionary.
Anyone know any other spellchecker component that meets my requirement?
This might help, if the users will have word installed http://msdn.microsoft.com/en-us/library/aa203681(office.11).aspx
I have used netspell not sure if its EXACTLy what you want, but its pretty good.

Picking my next graphics engine (Java vs. C#)

Requirements
I am developing a music game that requires access to the audio line-in and classes to help me analyze a MIDI file (playing the MIDI is NOT necessary for me). Secondly, I need a graphics engine that allows easy and quick development (within reason). The game's focus is not cutting edge graphics - think along the lines of Audiosurf.
Issue 1
Java provides easy to use and well documented Audio line-in input and MIDI file support built right into the API that I could not find with C#. I found some resources to read from the line-in and MIDI helper classes but don't have much documentation/support and seem to be workarounds to a lack of support by C#.
Issue 2
The second aspect of the game is of course the graphics engine. On the C# side, XNA seems to be the clear choice for my needs. On the Java side, I'm leaning towards JMonkeyEngine (or ogre4j as a second choice). JMonkeyEngine seems to be fine for my graphical uses but the documentation is scattered and sparse.
Deciding
Both issues are of equal importance. Also, I know the community here is prominently .NET programmers, so try to consider both languages if possible.
Use processing, http://www.processing.org/
It seems that you for now mostly want to test a see if your concept actually can be done/(is cool)
Processing is more or less made for this sort of things, audio and visual programmatic sketchpad. You can with very little code see if your ideas stands the way you want.
It's a subset of java so you could use java inside or outside depending on some factors.
Yes, you could use some .net, XNA/WPF or whatever but too me that seems premature.
Test you ideas first.
For the .NET and audio side of things, I have written some code to read and write MIDI files and included it as part of NAudio. Have a look at MIDI File Mapper for an example of how to make use of this. NAudio also includes the capability to capture microphone input.

What is a good project to learn Windows Forms programming in C#?

I want to learn c# so I can do some desktop developing. I've developed command-line C# applications and wanted to expand to Desktop applications.
I was thinking of create a screenshot tool like Jing or maybe a plugin for outlook to sync contact information with a service like Google.
What are your thoughts? My past experience is with web applications built in PHP.
I would try to start with something fairly contained, which only touched a few new technologies. For instance, if you want to learn Windows Forms, write something which uses that but doesn't need to talk to Outlook, Google, or the Win32 API. Once you've got the hang of Windows Forms, try one extra technology - try displaying your Google Contacts and do offline editing, for example. Then add another technology... etc.
In my experience it's hard enough to learn one new technology at a time - but that's far quicker than trying to learn two or more in one go. You inevitably get to the stage where you don't know where the problems are, and you have no confidence in any of your code because it's all new. This is particularly important if you're still fairly new to the language as well - although I'm glad to hear you started with some console apps :)
Sorry if that sounds like I'm being a wet blanket, and I realise it sounds like you'll take far longer to get to something useful that way, but I think you're more likely to be successful in the long run.
Find something that most importantly interests and excites you. If you pick something too boring that you don't care about you'll only give up before you get anywhere, and won't benefit at all. Don't do a rubbish project for the sake of learning a language. Do a good project, and do it in a new language as a side effect.
Make a notepad clone. While being fairly simple it will give you a primer in some basic Windows Forms mechanisms such as using menus and reacting on their events, getting input from controls for storage on disk, reading from disk and updating controls, using Docking and Anchoring and so on.
Twitter clients are the new hello world.
I read that somewhere the other day. I can't personally comment on its fitness for your goal.
Do something that you did before, but in another language. Then you won't have to think about most of the architecture of the particular task again, but you'll be able to compare the languages, the frameworks and their approaches.
I bet you'll learn a lot about your previous language as well doing this excercise.
A good project would be a simple windows form. You simply have a chance to put everything together. Or at least see a bigger picture.
You can make it as complicated as you want, without sticking to one area.
Suggesting a specific project is pointless. Think of something that interests you, or an application you want/need, then start making it - searching Stackoverflow/Google/MSDN/etc whenever you can't guess how to do a specific task.
For example, I had to make kiosk application that allowed customers to signup to a companies mailing-list. I tried using the Ruby framework Shoes, but it didn't work correctly on the laptop the application was to run on. Visual C# seemed like a better fit, and would almost certainly run correctly..
So I installed Visual C# Express, added a few labels and a button. I double clicked the button, and realised I didn't know the code to create a new WinForm window.. So I searched Google for "visual C# open new dialogue" or something, and I found out I had to add a new form, then call NewForm newwindow = new NewForm(); newwindow.show(); or similar.
Then, I added the username/email fields, then searched for "how to display an alert box" and checked I could display the form values.
That all worked, so now I had to decide how to store the emails. I had heard good things about LINQ to SQL, so looked into that, decided I wanted to use SQL Server CE (so I didn't have to install/run SQL Server on the laptop). That resulted in more searching around for how to make LINQ to SQL work with SQL Server CE..
Finally, I wanted to have a configuration panel to change the title/button strings etc (accessible via a certain keyboard shortcut).. A Google search revealed how to catch keystrokes, and I asked a Stackoverflow question about representing the settings (using a PanelView or something)
..anyway, the point of that slightly long, rambling and not terribly interesting story is.. You can learn many new technologies at once, as long as you have a specific application in mind (and you're determined to finish it!)
I learned C#, WinForms, SQL Server CE, LINQ to SQL, and simple application publishing stuff in a day - creating a functioning, useful application in the process - simply with a combination of prodding around, Google searches and Stackoverflow..

Categories