At last I have placed little demo-applet on main web-page (frej.sf.net) - it allows testing of some input text against some pattern. It would be slightly upgraded in future.
In Google Chrome you may see some strange notification and restriction on applet running. You can turn these messages off or use other browser (Firefox, Opera etc.)
Since project is now also registered at java.net (http://java.net/projects/frej) source directories and package structure is changed to:
net.java.frej
Excuse me for inconvenience, but this needs to be done ant it is better later than never.
Version 1.1 released with following changes from v1.0:
- group names could now contain any number of characters (letters and digits);
- optional element now could share brackets with its child;
- command-line arguments "threshold" and "punctuators" added;
- updated command-line help and javadocs;
- added second public constructor for Regex;
- added "Special" element to match end of line (now unusable);
- fix for bug with replacement string of "presentInSequence";
- fix for bugs with replacement and grouping of Subexpr elements;
- separation of subexpression body from its name fixed;
- follow element would stop early if current result is too bad;
- autotest functionality added;
- end of input now is Ctrl-Z or Ctrl-D, not empty line.
Version 1.1 will include few bug-fixes and improvements:
- empty strings in input for command-line utility;
- proper subexpr name separation;
- new command-line arguments;
- reduction of Follow evaluation;
- autotests;
- Optional element improvement.
Links to dedicated tracker tickets are in Developer's forum.
After that some big work on algorithm would start. Full (simplified) problem description is here:
http://apps.topcoder.com/forums/tc?module=Thread&threadID=713857&start=0&mc=1... read more
At last there is version (rev33) which incorporates all features which I regarded as necessary and which have only minor, non-abusive problems left.
Also documentation on pattern language is completed and placed in "overview" of javadocs.
I decide this version should be named 1.0 since it is functional enough for such title, though it remains "beta" because not much people tried and reviewed it.... read more
Now JavaDocs includes thorough explanation of pattern rules and syntax (though still lacking parts about substitutions and comments) on overview page.
Also JavaDocs now are accessible onlile from main page or via link http://frej.sf.net/javadocs/
Latest released frej.jar includes few important features (since previous "news" article):
- single line comments in patterns (from "//" to end of line);
- fix for error with escaped brackets (now all bracketing, escaping and spacing works perfect);
- implementation info (with version number, though it is not automated) in the manifest.mf;
- adjustable threshold for Regex.
So this release could be regarded as functional and stable. Though javadocs still waits for actualization.
Work of pattern syntax improvement is in progress. Current version already have two enhancements:
- spaces (and tabs, and line-feeds etc.) now are skipped when parsing pattern - if you need a space in substitution part, you may use underscore;
- two additional types of brackets added (rectangular "[]" and curly "{}") - they could be used in same way as normal brackets (for readability);
- substitution part could include brackets, underscores CRs and LFs with help of escaping them with backslash;
- also ability to load patterns from file added.... read more
In earlier versions replacement captured by named group could appear changed later, for example
(^(((#)|fooer)~A,foo),(((#)|barrier)~A,bar))|$A
for string "3 foo" would give "barrier" because after fooer was successfully captured, engine tries to match second half and captures group before understanding that whole part is unsuitable.
Now it is corrected (though grouping capturing mechanism now is bit tougher and may be requires optimization).... read more
1. Now error scoring of the expression is not evaluated by the worst score of one of its parts. I changed algorithm to "clever" behavior - i.e. while "Abraham" does not match "Ibragim", anyway "(Abraham,Lincoln)" matches "Ibragim Lincoln" because second part gives "compensation" due to perfect fitting and threshold for first part is raised.
Speaking technically, if there are consecutive elements (expr1,expr2...exprN), and they match with scores result1,result2...resultN, then total result is:
1 - ((1-result1)*(1-result2)*...*(resultN))^(1/N)
(it is just "geometric mean" of errors, if error is 1-result)... read more
Project on sourceforge was created two days ago, but only now it is reliably "started". I mean that now I added:
- downloadable jar-file, which is both library and command-line tool;
- javadoc for library users;
- simple guide-and-examples for FREJ syntax;
- prototype web-page for the project.
(Meanwhile I found one nasty bug with replacements and fixed it).
All these project parts would be slowly improved, however now you can at least understand what FREJ is and try to use it if you need it. ;-)