Spell Check Engine for AS3, Flash, Flex, AIR

Today I am happy to announce that the gskinner.com Spelling Plus Library (SPL) is available for purchase. It is a client-side, real-time (check spelling as you type) spell checking and spelling suggestions engine for ActionScript 3, including Flash CS3, Flex 2 / 3, and Adobe AIR. It was architected to be robust and performant, while also being extremely customizable and simple to use.

If you’ve seen any recent demos of Buzzword, you’ve already seen SPL in action. Virtual Ubiquity implemented Spelling Plus Library in their awesome word processing application, and has provided invaluable feedback that we have used to enhance the API.

In Flash CS3, you can set up spell checking on text fields or components without a single line of code. Just drag and drop components on stage. In Flex, you can use a few simple MXML tags to set everything up. Of course, if you want to get down and dirty, you can use the library’s robust and well documented API to control virtually every aspect of spell checking.

A few of SPL’s more notable features:

  • Checks spelling in any text field, as you type, with no server dependency

  • Context menus for spelling suggestions

  • Under 12kb for the full library and just 4kb for the core spelling logic. The full US English word list file (over 150 000 words) is only 250kb.

  • Background wordlist loading and polite parsing means you don’t have to halt your application while the dictionary initializes.

  • Support for accented characters, case sensitivity.

  • Can check over 35,000 words per second

  • Very simple mechanism for customizing underline styles and colors

  • Full support for HTML styled text, works with rich text editors

  • Custom user word lists

  • Comes with example files, US and UK word lists, a quick start guide, a specifications document, and full API documentation in ASDoc format

If you’d like to learn more about SPL’s features, view some demos, or buy a license, check out the gskinner.com Spelling Plus Library product page.

Grant Skinner

The "g" in gskinner. Also the "skinner".

@gskinner

31 Comments

  1. Good stuff Grant! I’m glad to see you got it launched…wish it was open source but I guess you gotta eat too. 😀 lol.

    Congrats.

  2. AS3 Spell Check Engine – gSkinner

    Grant, and the guys at gSkinner, has done it again. If you have a need to use Spell Checking and have a pretty penny to spend on it, this is probably your best/fastest solution. Read more here…

  3. Cool stuff. Is there a way to cache the 250KB word list using Flex 3 framework caching?

  4. Very nice. What are the plans for non-english languages? Can they be added easily?

  5. Thanks John! The whole open source thing is a topic for another full blog post (one I’ve been meaning to write for awhile). Briefly though, we put a huge amount of effort into making this a best of breed product. It is well architected, documented, integrates proprietary algorithms, and has seen many many rounds of revision and refactoring. I have every intention of supporting it and updating it as long as it is a relevant product. I did not want it to be a half baked, stagnant project like most (not all – and huge kudos to those that aren’t) open source projects are.

    I put a lot of thought into choosing a price that struck a balance between being affordable, and allowing us to continue to improve and support SPL. I think it is a very fair price given its capabilities, level of polish, and the market it addresses.

    I really feel one of ActionScript’s weaknesses is the lack of good commercial components and libraries. I would love to be able to purchase quality libraries that give me advanced functionality, but my choices are usually limited to working with a semi-complete, unsupported open source library, or building the functionality from scratch (I usually choose the latter)

  6. Harry,

    I believe framework caching will be limited to Adobe’s framework code, so probably not. We are using standard loads though, so the word list should be cached by the browser.

    Dirk,

    We are looking at supporting non-english languages with roman character sets, but will likely need to find partners to work with to ensure we get it right (it’s hard to verify that a spelling engine is working properly in a language you don’t read). If anyone is interested in partnering with us on this, let me know.

  7. I’m perfectly fine with the price point and it not being open source. I’m no open source buff (I believe in commerce; lol) but I know a project I’m finishing up now could benefit but we’re at the tail end so I’m not throwing anymore cash at it. 🙂 I’ll probably snag a license here soon though.

    Thanks and, again, awesome work!

  8. Grant,

    This is an amazing piece of work – really, really well done.

    FWIW, I support your decision to not go open-source (I’d support the alternative too), and the price is fair (even low) for something this robust and polished.

    My only concern is whether this is the cart before the horse – I’ve refrained from implementing text editing is a Flash app because I haven’t found a rich text editor component that was very good. Buzzword is AWESOME, but I’ve never seen a component that was even in the same ballpark.

    Does your team have a favorite component you use? Something homegrown? Any recommendations?

    Congratulations, and good luck!

  9. Would be interested in supporting your work for foreign language support – specifically can help with French, Spanish, Chinese, Arabic, and Russian. Write if interested.

  10. Hey Grant,

    This looks like a handy tool indeed. I wish you the best of luck with it!

    I just wanted to respond to your comment about open source Flash projects where you said this:

    “I did not want it to be a half baked, stagnant project like most (not all – and huge kudos to those that aren’t) open source projects are.”

    In my opinion whether a project is open source or not has very little to do with whether it’s a successful, well implemented project or not. I’ve seen plenty of half-baked commercial products that are much worse than anything in the open source. And of course what makes a bad “for-profit” component even worse is that you have to pay for it to find out it sucks.

    Anyway, my point in responding is that software using an open source license doesn’t make it any less of a product than a commercial one. There are plenty of reasons that people want to release software in this manner. And, as you already pointed out there are a few that really stand out and are better than any commercial alternatives.

  11. Grant,

    Nice work on this product. I think it will be a nice addition to the actionscript component family. However like Chris Allen, I do take exception with your comments on open source. By the tone of your comment you make it seem that the only true way to get quality code with good support is if it’s proprietary. When in fact there are countless open source projects that are robust, fully documented and supported. The Java community is a perfect example of this, there are so many great top quality open source products used in production environments all over the world. Like Chris mentioned, what makes a product successful is not it’s proprietary nature, but the quality of the code and commitment of those who are behind it.

    I personally don’t think there is anything wrong with proprietary code. But let’s be honest here… saying that the reason you decided not to release the source code is because you want it to be a quality product is IMHO disingenuous to say the least. Your product is closed and commercial because you want to make some revenue from it and that’s fine! That’s great and there is nothing wrong with that and surely no one will hold that against you. But saying you decided to go commercial because you wanted to have high quality standards is just FUD! It to a certain degree undermines and devalues a lot of the hard work that people in the community are putting behind their open source projects. I wouldn’t categorize projects like Red5, Papervision3d, Prana, AsWing, SWX, SWFmill, FlashDevelop, Flex SDK, As2lib, APE and countless others as “half baked” or “stagnant”. They are great quality projects develop and supported by wonderful individuals who believe in what they do.

    I do wish you the best with this product . Cheers!

  12. Chris,

    I completely agree. I don’t think anything I stated contradicts what you are saying.

    Samuel,

    I’m not sure you read my post fully. I specifically said that not all OS projects lack quality code or support. Unfortunately, the majority do. You don’t hear as much about these projects as you do about exceptional projects like Red5 and PPV3D, because they tend to fade into non-existence. There are also tons of amazing libraries and components that never see the light of day because there is little motivation for developers to polish, package and support them.

    Likewise, stating that I wanted to release this as a commercial product to maintain high quality standards is certainly not FUD. I have a huge amount of respect for the developers on successful OS projects (as many of them that I know personally can attest to), but I and my company do not have the time or resources to spend months developing, documenting, packaging and then supporting a product for free. Other people do, and that’s awesome, but we simply do not. I release a lot of code for free, but in order to do so I must release it in a less polished, unsupported form, and I didn’t want to do so with SPL.

    SPL is unlikely to be profitable. We have hundreds of hours invested in it, and much of the Flash community is still not used to paying for components, even when they offer a great deal of value for the price. This is something I hope will change – not so that I can make tons of money selling components – but so that a rich component ecosystem develops for both OS and commercial offerings. I think the lack of a market for commercial offerings currently prevents many amazing libraries from ever becoming available, and is one of the largest weaknesses in the Flash community at the moment.

    This is a longer reply than intended, but I don’t appreciate being told I am spreading FUD about a community that I have worked to support and promote. Offering a component commercially does not mean I don’t support OS, or that I won’t continue to release large amounts of my own code for free.

    I do intend to organize my thoughts on this, and post a longer article on the subject in the near future… I think it is an important topic at this time in our community’s evolution.

    Regards.

  13. Perhaps your missing my point in my earlier comment and assuredly it was probably my fault for not explaining myself clearly. This discussion is not about taking sides in the Open Source vs. Close Sourced battle. I don’t believe any sides should be taken since they are just different approaches of doing things. The only thing I take exception with is this line …

    “I did not want it to be a half baked, stagnant project like most (not all – and huge kudos to those that aren’t) open source projects are.”

    which you have to admit is kind of a loaded statement. I agree that there are open source projects out there that don’t really cut it. But one also has to realize that open source(OS) is a relatively new phenomenon in it’s current incarnation and a lot of OS projects are still works in progress. Just like closed projects they hit stumbling blocks and have the occasionally lapse in attention.

    But IMHO saying that you decided to go commercial to obtain a high quality standard just isn’t jiving with me. Like Chris mentioned, one does not have anything to do with the other and I do want to reiterate the fact that the quality of a product does not depend on how closed or open it is.

    Like I mentioned earlier I really do hope you recoup your cost and that SPL turns out to be very profitable for you and your company. There’s nothing wrong with making components that turn out to be very profitable streams of revenue for your company. But the decision to open or close software has nothing to do with quality concerns and everything to do with revenue and cost.

    I do think that the Flash community is willing to pay for components. It’s just that they want the best bang for their buck just like every other consumer. SPL seems to be that and I do believe you will recoup your cost and then some because it seems like a valuable component. The main issue with commercial components is not that the Flash community won’t pay for them is that Adobe has not made a robust platform for component developers to release protected or DRM’d components. Piracy is the evil monster in the room and not a laissez faire attitude towards component purchasing by the community.

    All the best!

  14. Grant,

    This certainly looks like a useful component. I’ve got a project which would definitely benefit from something like this. If it does what I need then the price is just about acceptable. However, my main concern is that I’ve been burnt by Flash components before – some of them are very brittle and don’t integrate well with existing code. Can I suggest that you create a demo version which people can download and try programming with before buying? This works very well for things like Zinc and Director xtras and I think would work well here.

    Cheers

    Joe

  15. Joe,

    Unfortunately, there’s no real mechanism for offering demo versions of components in Flash.

    The best I can offer you is our reputation, a promise of support, and some great feedback from another awesome Flex developer:

    http://www.colettas.org/?p=183

    Let me know if you have any questions.

  16. Sounds like a good library, but IMO please don’t jump on the bandwagon of a lot of other developers by touting ‘proprietary algorithms.’ There’s nothing proprietary about searching and retrieving word lists and testing spelling. In other words, it’s all been done before. Maybe loading in your word library as a ByteArray and storing it locally once loaded as an LSO is ‘proprietary’ to your use, but then again, been done before.

    I’m definitely not belittling the work you’ve put into this library – just be mindful of your claims, that’s all.

  17. Grant

    >>

    Unfortunately, there’s no real mechanism for offering demo versions of components in Flash.

    >>

    Grant, I know your reputation goes a long way but I’m intrigued by the idea of it not being possible to make a demo component. What’s to stop you creating a version which puts up a nag dialog everytime it checks a spelling? Or one that won’t check textfields with more than 10 words or something similar. Are you concerned that people can reverse engineer the component and remove the demo part? If so that’s true for almost any demo mechanism and the reality is that most people who might buy it can’t or won’t bother. I do appreciate that its your decision but I think having a demo would increase your sales in the long run.

  18. Hey Grant, nice component for sure! I guess I’m using it all the time in Buzzword now. You need a new reference customer now that Adobe but Buzzword though:) Kinda maybe…

    Have you thought of offering a 30 Day money back guarantee? Might as good if not better than a trial period. I know WebAssist does this with their Dreamweaver extensions and is quite successful. At Nitobi we use a trial period with simple JS pop up that says the component has expired after 30 Days, obviously it’s not extremely hard to remove it but anyone who’s going to go to the trouble likely won’t buy your component anyway. As we all know most licensing basically runs on the honor system anyway…how hard is it to get a cracked version of CS3;-)

  19. where’s the jack-o-lantern contest this year? what was it, great pumpkin showdown?

  20. Currently I am using AIR + Ext to build the application, I would like to know if the Spell Check Engine can support this kind of AIR ajax application? thanks

  21. Hi, I purchased and installed this into my website and it works as described, but it really needs some improvement on the word suggestion feature. I typed in “Amercan” and it gave me about 15 suggestions and none were “American”. Just one vowel was missing from my misspelled word and it couldn’t figure that out.

    I’m not sure who’s working on the algorithms, but they need to start with simple “single-letter” omissions and work out from there.

    I know this isn’t easy stuff and I’m no rocket scientist, so please know I appreciate the complexity. I only took the time (which is precious) to mention this so you’d have a successful product. Wish you the best!

    Sincerely,

    Chuck

  22. We’re definitely trying to improve results. The issue stems from a trade-off between speed and results.

    The standard algorithm for fast spell checking is Levenshtein, which doesn’t do a great job with character omissions. We were able to write a custom algorithm that returns results roughly 10x faster than Levenshtein, but it’s even more weighted against character omissions. This means that it returns suggestions in ~200ms vs 2s, but that it tends to favour suggestions that require a character replacement over suggestions that require an insertion. For example, given “fst”, it will favour “fit” or “fat” over “fist”.

    I am looking at ways to improve the algorithm for this specific scenario, and will hopefully have an update in the next few weeks.

  23. Nice one! I am happy to see you got it launched…wish it was open source but I guess you gotta eat too. 😀 lol.

    Congrats. Grants

  24. rudrapradeepta.k December 6, 2008 at 1:48am

    hi grant,

    My client has got this for our project, Am working with spell checker.

    My problem is I have text fields in different movie Clips in our project. When i try to keep two components i,e SPLTag and SPLWordListLoader in different movieClips Am getting an error that only one instance of SPLWordListLoader is accepted.

    so please suggest me the way to use it.

    I will be waiting for your suggestions..

    Regards,

    Rudra Pradeepta.k.

  25. Rudra,

    You only need one instance of the SPLWordListLoader for your application. All instances of SPLTag share the same Dictionary instance, and that Dictionary has its wordlist set by the SPLWordListLoader component.

    Also, please note that the support form is a better place to get help with this than the blog comments.

    http://gskinner.com/products/

  26. Everytime I think of something good to develop you beat me to it! Nice work!

  27. Hey, thanks for the post! I was googling this because I wrote on the same topic (http://is.gd/jXH5) and then I found you. Keep up the good work!

  28. Shailesh Mewada August 12, 2009 at 6:54am

    Really cool…good work.

  29. This is a great product if you’re working in Flex and you need a simple speller for English.

    If you need spelling for other languages though, it’s a poor choice. It lacks Unicode support and has a VERY rudimentary spelling engine consisting of simple affix methodology (not directly compatible with aspell or ispell) Only French and German are available and the German is just barely usable because of it’s lack of German compound noun recognition. Don’t even think of trying it with an agglutinative language like Hungarian.

    Very nice Flex library, very poor spelling engine.

  30. Hi Grant,

    ant clues on how to make SPL (tlf enabled) work with TextFlow ?
    Thanx

Comments are closed.