spell problems

classic Classic list List threaded Threaded
18 messages Options
Reply | Threaded
Open this post in threaded view
|

spell problems

Moshe Kaminsky
Hi,

The spelling system is much more usable now with the ability to add
words to the spell files. I still have some minor problems and
questions:

- I tried generating a Hebrew spl file from the Myspell files, as
  described in the help. After consuming about 3.5GB (!) of swap space,
  vim fails with E342 (no memory), and no file is created. Should it
  normally take so much memory?

- When the 'spellfile' option is empty, and the "spell" subdirectory
  does not exist, an error occurs when using zg (I guess this happens
  also when 'spellfile' is set to a non-existing directory, but if the
  option is set automatically, I think it's reasonable that the
  directory is created as well)

- The help describes the process of loading the spell files, but not
  when it is done. Is this done only when setting the spelllang option?
  I'm trying find a way of loading spl files specific to a given file,
  filetype, etc.

- Words after a non-breaking space (Unicode 0xa0) are always marked as
  spelling mistakes, without the first letter (for example, in
  '<nbsp>fork', the 'ork' is marked as a spelling mistake).

Thanks,
Moshe

--
I love deadlines. I like the whooshing sound they make as they fly by.
                                        -- Douglas Adams
   
    Moshe Kaminsky <[hidden email]>
    Home: 08-9456841


attachment0 (205 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: spell problems

Bram Moolenaar

Moshe Kaminsky wrote:

> The spelling system is much more usable now with the ability to add
> words to the spell files. I still have some minor problems and
> questions:
>
> - I tried generating a Hebrew spl file from the Myspell files, as
>   described in the help. After consuming about 3.5GB (!) of swap space,
>   vim fails with E342 (no memory), and no file is created. Should it
>   normally take so much memory?

How big is a dump of all possible words?  I notice there are an awful
number of affixes and a 3 Mbyte list of basic words.  Thus it does
appear that the whole word list is huge.  Vim first builds a tree with
all words before doing the compression.

> - When the 'spellfile' option is empty, and the "spell" subdirectory
>   does not exist, an error occurs when using zg (I guess this happens
>   also when 'spellfile' is set to a non-existing directory, but if the
>   option is set automatically, I think it's reasonable that the
>   directory is created as well)

I have done this intentionally, because it is rather unpredictable where
the directory would be created.  Perhaps it's reasonable to ask the user
if he wants to create the directory, since "zg" is an interactive
command.

> - The help describes the process of loading the spell files, but not
>   when it is done. Is this done only when setting the spelllang option?
>   I'm trying find a way of loading spl files specific to a given file,
>   filetype, etc.

The loaded .spl files are cached.  They only depend on the language
name.  You can set 'spelllang' on a per-buffer basis, thus you need to
use a different language name if you want to use a different spell file.

I still have to work on special spell files for rare words, medical
words, etc.

> - Words after a non-breaking space (Unicode 0xa0) are always marked as
>   spelling mistakes, without the first letter (for example, in
>   '<nbsp>fork', the 'ork' is marked as a spelling mistake).

I see this problem when using UTF-8 encoding.  This patch should fix it:

Index: screen.c
===================================================================
RCS file: /cvsroot/vim/vim7/src/screen.c,v
retrieving revision 1.26
diff -u -r1.26 screen.c
--- screen.c 8 Jun 2005 22:02:43 -0000 1.26
+++ screen.c 17 Jun 2005 10:45:12 -0000
@@ -3594,10 +3594,15 @@
  char_attr = syntax_attr;
     if (c != 0 && (!has_syntax || can_spell))
     {
+ char_u *prev_ptr;
 # ifdef FEAT_MBYTE
- char_u *prev_ptr = ptr - (has_mbyte ? mb_l : 1);
-# else
- char_u *prev_ptr = ptr - 1;
+ if (has_mbyte)
+ {
+    prev_ptr = ptr - mb_l;
+    v -= mb_l - 1;
+ }
+ else
+    prev_ptr = ptr - 1;
 # endif
  word_end = v + spell_check(wp, prev_ptr, &spell_attr);
 

--
From "know your smileys":
 % Bike accident (a bit far-fetched, I suppose)

 /// Bram Moolenaar -- [hidden email] -- http://www.Moolenaar.net   \\\
///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
 \\\     Buy LOTR 3 and help AIDS victims -- http://ICCF.nl/lotr.html   ///
Reply | Threaded
Open this post in threaded view
|

Re: spell problems

Moshe Kaminsky
* Bram Moolenaar <[hidden email]> [17/06/05 14:12]:

>
> Moshe Kaminsky wrote:
>
> > The spelling system is much more usable now with the ability to add
> > words to the spell files. I still have some minor problems and
> > questions:
> >
> > - I tried generating a Hebrew spl file from the Myspell files, as
> >   described in the help. After consuming about 3.5GB (!) of swap space,
> >   vim fails with E342 (no memory), and no file is created. Should it
> >   normally take so much memory?
>
> How big is a dump of all possible words?  I notice there are an awful
> number of affixes and a 3 Mbyte list of basic words.  Thus it does
> appear that the whole word list is huge.  Vim first builds a tree with
> all words before doing the compression.
Ok, I finally understand the .aff/.dic files. The problem is that in
Hebrew a phrase such as "and when we have seen you" is represented by
one word (a form of "see" with various combinations of affixes depending
on the exact tense, the gender and amount of people referred to by
"you", and so on). In the Myspell files, the .aff file contains
combinations of prefixes, while the suffixes are included in the word
list .dic. Hence the big size of both files. I asked the authors of
hspell (a Hebrew spell checker, which also generates the Myspell files.)
They said that their spell checker (and aspell) uses something called
"affix compression", but I don't know what it is. The also pointed me to
the scripts which generate these files. I tried to throw away the longer
prefixes (longer than 4 letters). This left me with about 130 prefixes
(and about 300,000 words). I called :mkspell with this new list about 16
hours ago, and it is still running...

As far as I understand, in the vim spelling system there is no
distinction between affixes and base words, right? There is just a tree
with all words? If so, I guess the only solution will be to reduce the
number of prefixes even further.

>
> > - The help describes the process of loading the spell files, but not
> >   when it is done. Is this done only when setting the spelllang option?
> >   I'm trying find a way of loading spl files specific to a given file,
> >   filetype, etc.
>
> The loaded .spl files are cached.  They only depend on the language
> name.  You can set 'spelllang' on a per-buffer basis, thus you need to
> use a different language name if you want to use a different spell file.
>
> I still have to work on special spell files for rare words, medical
> words, etc.
I think that from the point of view of the user, it will be simplest to
just have a command like :loadSpellFile <file>, and then the rest can be
done via filetypes, autocommands, etc. For example, now that I'm editing
an email about vim, I would like to have vim terminology as correct
words, etc. Also, I think it's useful to be able to load more than one
language. For example, when I edit Hebrew, it is usually mixed with
English.

Thanks,
Moshe

attachment0 (205 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: spell problems

Bram Moolenaar

Moshe Kaminsky wrote:

> > How big is a dump of all possible words?  I notice there are an awful
> > number of affixes and a 3 Mbyte list of basic words.  Thus it does
> > appear that the whole word list is huge.  Vim first builds a tree with
> > all words before doing the compression.

I now used the unmunch program to generate a full Hebrew word list.
It's 1.2 Gbyte.

> Ok, I finally understand the .aff/.dic files. The problem is that in
> Hebrew a phrase such as "and when we have seen you" is represented by
> one word (a form of "see" with various combinations of affixes depending
> on the exact tense, the gender and amount of people referred to by
> "you", and so on). In the Myspell files, the .aff file contains
> combinations of prefixes, while the suffixes are included in the word
> list .dic. Hence the big size of both files. I asked the authors of
> hspell (a Hebrew spell checker, which also generates the Myspell files.)
> They said that their spell checker (and aspell) uses something called
> "affix compression", but I don't know what it is. The also pointed me to
> the scripts which generate these files. I tried to throw away the longer
> prefixes (longer than 4 letters). This left me with about 130 prefixes
> (and about 300,000 words). I called :mkspell with this new list about 16
> hours ago, and it is still running...
>
> As far as I understand, in the vim spelling system there is no
> distinction between affixes and base words, right? There is just a tree
> with all words? If so, I guess the only solution will be to reduce the
> number of prefixes even further.

Vim can read the affixes, but so far flattened the word list by applying
all affixes to the words they apply to.  Then the tree is compressed,
resulting in a reasonable small tree.  This works well for most
languages, including Polish, which has many affixes.

For Hebrew the problem appears to be that it is not possible to build
the whole tree before doing the compression.  And the compression can
only be done at the end, when the whole tree has been filled.  Reducing
the memory used per node would only reduce the problem by 50% or so.
It's unlikely to find a solution in that direction.

I thought about this and the only solution I can think of is to keep the
prefixes for Hebrew.  I have implemented this solution now.  It adds
some complexity and slows down checking words, but it works.  The
complexity is still reasonable, since only prefixes without a chop
string are kept.  And for Hebrew there are no chop strings at all.

The possible prefixes themselves also form a tree.  Vim can find the
matching prefixes and try to find a matching word after that and check
that this word supports the prefix.

I'll upload a new snapshot in a few hours.  Add the PFXPOSTPONE keyword
to the .aff file and you should be able to do Hebrew spell checking.  I
verified that it works on a limited list of words (the whole wordlist is
over a Gbyte, I can't check everything...).  And I only used UTF-8, my
system doesn't have a Hebrew locale for ISO-8859-8.  Thus you should
really verify that the spell checking works properly.

An advantage is that the resulting .spl file size is quite small:

   386196  he_IL.aff
  3103184  he_IL.dic
   377180  he.utf-8.spl

Thus the whole .spl file is smaller than the original .aff file!

Note that the suggestion mechanism doesn't know about the prefixes yet.
I wonder how this should work, since it's likely that many combinations
of prefixes and words could be used for the suggestions.

> > > - The help describes the process of loading the spell files, but not
> > >   when it is done. Is this done only when setting the spelllang option?
> > >   I'm trying find a way of loading spl files specific to a given file,
> > >   filetype, etc.
> >
> > The loaded .spl files are cached.  They only depend on the language
> > name.  You can set 'spelllang' on a per-buffer basis, thus you need to
> > use a different language name if you want to use a different spell file.
> >
> > I still have to work on special spell files for rare words, medical
> > words, etc.
>
> I think that from the point of view of the user, it will be simplest to
> just have a command like :loadSpellFile <file>, and then the rest can be
> done via filetypes, autocommands, etc. For example, now that I'm editing
> an email about vim, I would like to have vim terminology as correct
> words, etc. Also, I think it's useful to be able to load more than one
> language. For example, when I edit Hebrew, it is usually mixed with
> English.

The 'spelllang' option is used for this.  If you want to add Vim words
you could do: ":set spl+=vim" (once the extra lists get implemented).

Mixing English and Hebrew is already possible: ":set spl=en,he".

--
hundred-and-one symptoms of being an internet addict:
92. It takes you two hours to check all 14 of your mailboxes.

 /// Bram Moolenaar -- [hidden email] -- http://www.Moolenaar.net   \\\
///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
 \\\     Buy LOTR 3 and help AIDS victims -- http://ICCF.nl/lotr.html   ///
Reply | Threaded
Open this post in threaded view
|

Re: spell problems

Dave Roberts
Bram Moolenaar wrote:
...

>I'll upload a new snapshot in a few hours.  Add the PFXPOSTPONE keyword
>...
>

The last couple snapshots have caused a windows exception for me when I
run mkspell.

The actual command is:
mkspell! ~/VIMFiles/spell/en ~/tmp/VimSpell/en_US ~/tmp/VimSpell/en_GB

en_US and en_GB are what I got from
http://lingucomponent.openoffice.org/spell_dic.html as per spell.txt

I'm not really able to debug this at this time. Hope this is enough info
(but I doubt it). Previous compiles work and that's what I'm using.

VIM - Vi IMproved 7.0aa ALPHA (2005 Jun 17, compiled Jun 18 2005 11:45:16)
MS-Windows 32 bit GUI version
Compiled by Dave@DAVE-HOME
Big version with GUI.  Features included (+) or not (-):
+arabic +autocmd +balloon_eval +browse ++builtin_terms +byte_offset
+cindent +clientserver +clipboard +cmdline_compl
+cmdline_hist +cmdline_info +comments +cryptv +cscope +dialog_con_gui
+diff +digraphs -dnd -ebcdic +emacs_tags +eval
+ex_extra +extra_search +farsi +file_in_path +find_in_path +folding
-footer +gettext/dyn -hangul_input +iconv/dyn
+insert_expand +jumplist +keymap +langmap +libcall +linebreak
+lispindent +listcmds +localmap +menu +mksession
+modify_fname +mouse +mouseshape +multi_byte +multi_lang -mzscheme
+netbeans_intg -ole -osfiletype +path_extra -perl
-postscript +printer -profile -python +quickfix +rightleft -ruby
+scrollbind +signs +smartindent -sniff +statusline
-sun_workshop +syntax +tag_binary +tag_old_static -tag_any_white -tcl
-tgetent -termresponse +textobjects +title
+toolbar +user_commands +vertsplit +virtualedit +visual +visualextra
+viminfo +vreplace +wildignore +wildmenu +windows
+writebackup -xfontset -xim -xterm_save -xpm_w32
   system vimrc file: "$VIM\vimrc"
     user vimrc file: "$HOME\_vimrc"
 2nd user vimrc file: "$VIM\_vimrc"
      user exrc file: "$HOME\_exrc"
  2nd user exrc file: "$VIM\_exrc"
  system gvimrc file: "$VIM\gvimrc"
    user gvimrc file: "$HOME\_gvimrc"
2nd user gvimrc file: "$VIM\_gvimrc"
    system menu file: "$VIMRUNTIME\menu.vim"
Compilation: cl -c /W3 /nologo  -ML -I. -Iproto -DHAVE_PATHDEF -DWIN32  
-DFEAT_CSCOPE -DFEAT_NETBEANS_INTG      -DWINVER=0x0400
-D_WIN32_WINNT=0x0400 /Ox -DNDEBUG  -DFEAT_GUI_W32 -DDYNAMIC_ICONV
-DDYNAMIC_GETTEXT -DFEAT_BIG /Zi
Linking: link /RELEASE /nologo /subsystem:windows /incremental:no
/nodefaultlib:libc advapi32.lib shell32.lib gdi32.lib comdlg32.lib
ole32.lib uuid.lib oldnames.lib kernel32.lib gdi32.lib   winspool.lib
comctl32.lib advapi32.lib shell32.lib  /machine:i386 /nodefaultlib
libc.lib   user32.lib         WSock32.lib  /PDB:.\ObjG/gvim.pdb
-debug:full -debugtype:cv,fixup

Reply | Threaded
Open this post in threaded view
|

Re: spell problems

Bram Moolenaar

Dave Roberts wrote:

> The last couple snapshots have caused a windows exception for me when I
> run mkspell.
>
> The actual command is:
> mkspell! ~/VIMFiles/spell/en ~/tmp/VimSpell/en_US ~/tmp/VimSpell/en_GB
>
> en_US and en_GB are what I got from
> http://lingucomponent.openoffice.org/spell_dic.html as per spell.txt
>
> I'm not really able to debug this at this time. Hope this is enough info
> (but I doubt it). Previous compiles work and that's what I'm using.
>
> VIM - Vi IMproved 7.0aa ALPHA (2005 Jun 17, compiled Jun 18 2005 11:45:16)
> MS-Windows 32 bit GUI version
> Compiled by Dave@DAVE-HOME

I don't get this crash.  More information is welcome.

--
hundred-and-one symptoms of being an internet addict:
98. The Alta Vista administrators ask you what sites are missing
    in their index files.

 /// Bram Moolenaar -- [hidden email] -- http://www.Moolenaar.net   \\\
///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
 \\\     Buy LOTR 3 and help AIDS victims -- http://ICCF.nl/lotr.html   ///
Reply | Threaded
Open this post in threaded view
|

Re: spell problems

Dave Roberts
Bram Moolenaar wrote:

>Dave Roberts wrote:
>
>  
>
>>The last couple snapshots have caused a windows exception for me when I
>>run mkspell.
>>
>>The actual command is:
>>mkspell! ~/VIMFiles/spell/en ~/tmp/VimSpell/en_US ~/tmp/VimSpell/en_GB
>>
>>en_US and en_GB are what I got from
>>http://lingucomponent.openoffice.org/spell_dic.html as per spell.txt
>>
>>I'm not really able to debug this at this time. Hope this is enough info
>>(but I doubt it). Previous compiles work and that's what I'm using.
>>
>>VIM - Vi IMproved 7.0aa ALPHA (2005 Jun 17, compiled Jun 18 2005 11:45:16)
>>MS-Windows 32 bit GUI version
>>Compiled by Dave@DAVE-HOME
>>    
>>
>
>I don't get this crash.  More information is welcome.
>
>  
>

No need - The build from todays CVS sources doesn't cause the crash.

Thanks!

- Dave
Reply | Threaded
Open this post in threaded view
|

Re: spell problems

Moshe Kaminsky
In reply to this post by Bram Moolenaar
Hi,

* Bram Moolenaar <[hidden email]> [19/06/05 23:37]:

>
> I thought about this and the only solution I can think of is to keep the
> prefixes for Hebrew.  I have implemented this solution now.  It adds
> some complexity and slows down checking words, but it works.  The
> complexity is still reasonable, since only prefixes without a chop
> string are kept.  And for Hebrew there are no chop strings at all.
>
> The possible prefixes themselves also form a tree.  Vim can find the
> matching prefixes and try to find a matching word after that and check
> that this word supports the prefix.
>
> I'll upload a new snapshot in a few hours.  Add the PFXPOSTPONE keyword
> to the .aff file and you should be able to do Hebrew spell checking.  I
> verified that it works on a limited list of words (the whole wordlist is
> over a Gbyte, I can't check everything...).  And I only used UTF-8, my
> system doesn't have a Hebrew locale for ISO-8859-8.  Thus you should
> really verify that the spell checking works properly.
>
> An advantage is that the resulting .spl file size is quite small:
>
>    386196  he_IL.aff
>   3103184  he_IL.dic
>    377180  he.utf-8.spl
>
> Thus the whole .spl file is smaller than the original .aff file!
I don't know if this is intentional, but it appears that the spelling
system doesn't actually make use of the information in the .aff/.dic
files, but just accepts any combination of prefix and word. I used the
attached script to verify that vim accepts all such combinations as
legal words.

The full information in these files represents the strict rules of the
Hebrew language academy. In everyday language they are seldom completely
obeyed. Even so, accepting all combinations will generate false
positives for everyday language as well. Still, if this can't be fixed,
for me this is an acceptable solution (if the strict rules are actually
needed, it is always possible to run hspell on the file later.) Overall,
I think that the spelling works great. I still feel no slowdown at all
when typing, even in Hebrew!

>
> Note that the suggestion mechanism doesn't know about the prefixes yet.
> I wonder how this should work, since it's likely that many combinations
> of prefixes and words could be used for the suggestions.

I don't know how the suggestions mechanism works in general, but maybe
it can be applied to first to the word with a prefix of up to length 3
removed, and for close enough matchings, try to match the prefix itself.
For prefixes of length greater than 3, first check the letters of which
it consists, since legal prefixes use only combinations of the same 6
letters. In general, short prefixes should be preferred over long ones.
Of course, I guess this is all Hebrew specific.

BTW, regarding the usage of the suggestions mechanism, I think it would
be handy if one could go over suggestions in insert mode, in the style
of ^N/^P, instead of choosing from a menu.

>
> > > > - The help describes the process of loading the spell files, but not
> > > >   when it is done. Is this done only when setting the spelllang option?
> > > >   I'm trying find a way of loading spl files specific to a given file,
> > > >   filetype, etc.
> > >
> > > The loaded .spl files are cached.  They only depend on the language
> > > name.  You can set 'spelllang' on a per-buffer basis, thus you need to
> > > use a different language name if you want to use a different spell file.
> > >
> > > I still have to work on special spell files for rare words, medical
> > > words, etc.
> >
> > I think that from the point of view of the user, it will be simplest to
> > just have a command like :loadSpellFile <file>, and then the rest can be
> > done via filetypes, autocommands, etc. For example, now that I'm editing
> > an email about vim, I would like to have vim terminology as correct
> > words, etc. Also, I think it's useful to be able to load more than one
> > language. For example, when I edit Hebrew, it is usually mixed with
> > English.
>
> The 'spelllang' option is used for this.  If you want to add Vim words
> you could do: ":set spl+=vim" (once the extra lists get implemented).
>
> Mixing English and Hebrew is already possible: ":set spl=en,he".
I didn't notice that 'spelllang' may have several entries! (might be
useful to mention this in spell.txt as well.) Now I see that I can use
spelling for both Hebrew and English together. I noticed, though, that
the .add files are only loaded for the first language.

I'm a bit confused, though. Apparently, the possible values for this
option are arbitrary strings (or perhaps of length 2?). So what stops me
from doing ":set spl+=vim" (or ":set spl+=vi") right now, and add vim
words to vim.utf-8.spl?

Thanks again for a great feature,
Moshe

> --
> hundred-and-one symptoms of being an internet addict:
> 92. It takes you two hours to check all 14 of your mailboxes.
>
>  /// Bram Moolenaar -- [hidden email] -- http://www.Moolenaar.net   \\\
> ///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
> \\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
>  \\\     Buy LOTR 3 and help AIDS victims -- http://ICCF.nl/lotr.html   ///
>

--
I love deadlines. I like the whooshing sound they make as they fly by.
                                        -- Douglas Adams
   
    Moshe Kaminsky <[hidden email]>
    Home: 08-9456841


chkspell.vim (633 bytes) Download Attachment
attachment1 (205 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: spell problems

Bram Moolenaar

Moshe Kaminsky wrote:

> > I thought about this and the only solution I can think of is to keep the
> > prefixes for Hebrew.  I have implemented this solution now.  It adds
> > some complexity and slows down checking words, but it works.  The
> > complexity is still reasonable, since only prefixes without a chop
> > string are kept.  And for Hebrew there are no chop strings at all.

[...]

> I don't know if this is intentional, but it appears that the spelling
> system doesn't actually make use of the information in the .aff/.dic
> files, but just accepts any combination of prefix and word. I used the
> attached script to verify that vim accepts all such combinations as
> legal words.

That must be a bug.  Can you give me a few examples of words that aren't
flagged as wrong, where the prefix was added even though the .aff file
doesn't allow it?

> The full information in these files represents the strict rules of the
> Hebrew language academy. In everyday language they are seldom completely
> obeyed. Even so, accepting all combinations will generate false
> positives for everyday language as well. Still, if this can't be fixed,
> for me this is an acceptable solution (if the strict rules are actually
> needed, it is always possible to run hspell on the file later.) Overall,
> I think that the spelling works great. I still feel no slowdown at all
> when typing, even in Hebrew!

I'm glad it already does something useful, but I'm sure we can restrict
prefixes to words where they are allowed.

> > Note that the suggestion mechanism doesn't know about the prefixes yet.
> > I wonder how this should work, since it's likely that many combinations
> > of prefixes and words could be used for the suggestions.
>
> I don't know how the suggestions mechanism works in general, but maybe
> it can be applied to first to the word with a prefix of up to length 3
> removed, and for close enough matchings, try to match the prefix itself.
> For prefixes of length greater than 3, first check the letters of which
> it consists, since legal prefixes use only combinations of the same 6
> letters. In general, short prefixes should be preferred over long ones.
> Of course, I guess this is all Hebrew specific.

Currently the prefix mechanism is only used for Hebrew, thus I'll try
using these suggestions.  But first need to make sure that the prefix
mechanism is the right way to go.

> BTW, regarding the usage of the suggestions mechanism, I think it would
> be handy if one could go over suggestions in insert mode, in the style
> of ^N/^P, instead of choosing from a menu.

The user interface might change later.  I first want to make the scoring
work well.  Currently the right word is in the first ten suggestions
about 80% of the time.  Aspell has that at 90%, thus there is still some
work to do...

> > Mixing English and Hebrew is already possible: ":set spl=en,he".
>
> I didn't notice that 'spelllang' may have several entries! (might be
> useful to mention this in spell.txt as well.) Now I see that I can use
> spelling for both Hebrew and English together. I noticed, though, that
> the .add files are only loaded for the first language.

I'll look into that.  'spellfile' can only specify one file, since you
have to decide where to add words to.  But we can read multiple .add
files.

> I'm a bit confused, though. Apparently, the possible values for this
> option are arbitrary strings (or perhaps of length 2?). So what stops me
> From doing ":set spl+=vim" (or ":set spl+=vi") right now, and add vim
> words to vim.utf-8.spl?

I still have to look into supporting word lists that are for specific
purposes.  Currently only the first two letters (the language
name) are used in a few places.

--
A meeting is an event at which the minutes are kept and the hours are lost.

 /// Bram Moolenaar -- [hidden email] -- http://www.Moolenaar.net   \\\
///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
 \\\     Buy LOTR 3 and help AIDS victims -- http://ICCF.nl/lotr.html   ///
Reply | Threaded
Open this post in threaded view
|

Re: spell problems

Moshe Kaminsky
* Bram Moolenaar <[hidden email]> [21/06/05 01:06]:

>
>
> Moshe Kaminsky wrote:
>
> > > I thought about this and the only solution I can think of is to keep the
> > > prefixes for Hebrew.  I have implemented this solution now.  It adds
> > > some complexity and slows down checking words, but it works.  The
> > > complexity is still reasonable, since only prefixes without a chop
> > > string are kept.  And for Hebrew there are no chop strings at all.
>
> [...]
>
> > I don't know if this is intentional, but it appears that the spelling
> > system doesn't actually make use of the information in the .aff/.dic
> > files, but just accepts any combination of prefix and word. I used the
> > attached script to verify that vim accepts all such combinations as
> > legal words.
>
> That must be a bug.  Can you give me a few examples of words that aren't
> flagged as wrong, where the prefix was added even though the .aff file
> doesn't allow it?
- When prefixing the word 'ודאות' with 'ב', the 'ו' should be doubled,
  as per line 4 of PFX A: 'בוודאות' is correct, 'בודאות' is not. Both
  the correct and the wrong versions are accepted.

- The word 'אאבד' (from group B) can not have 'ב' as a prefix: 'באאבד'
  is illegal but accepted.

- Similarly for 'אבדונה' with the prefix 'ה' (the word belongs to group
  E.)

The first of these examples is quiet pedantic, but the other two words
make no sense.

> >
> > I don't know how the suggestions mechanism works in general, but maybe
> > it can be applied to first to the word with a prefix of up to length 3
> > removed, and for close enough matchings, try to match the prefix itself.
> > For prefixes of length greater than 3, first check the letters of which
> > it consists, since legal prefixes use only combinations of the same 6
> > letters. In general, short prefixes should be preferred over long ones.
> > Of course, I guess this is all Hebrew specific.
>
> Currently the prefix mechanism is only used for Hebrew, thus I'll try
> using these suggestions.  But first need to make sure that the prefix
> mechanism is the right way to go.
>
I would like to add that if the rule corresponding to the first example
above is implemented, then this (missing or extra 'ו' after a prefix)
should probably be the first things to check for suggestions.

> > BTW, regarding the usage of the suggestions mechanism, I think it would
> > be handy if one could go over suggestions in insert mode, in the style
> > of ^N/^P, instead of choosing from a menu.
>
> The user interface might change later.  I first want to make the scoring
> work well.  Currently the right word is in the first ten suggestions
> about 80% of the time.  Aspell has that at 90%, thus there is still some
> work to do...

I wonder how this is measured... As far as I understand the information
of how often a word occurs in the language does not play any role.
Perhaps if the suggestions are weighted with this information, this will
improve the suggestions.

Thanks,
Moshe

attachment0 (205 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: spell problems

Bram Moolenaar

Moshe Kaminsky wrote:

> > That must be a bug.  Can you give me a few examples of words that aren't
> > flagged as wrong, where the prefix was added even though the .aff file
> > doesn't allow it?
>
> - When prefixing the word '?????' with '?', the '?' should be doubled,
>   as per line 4 of PFX A: '???????' is correct, '??????' is not. Both
>   the correct and the wrong versions are accepted.
>
> - The word '????' (from group B) can not have '?' as a prefix: '?????'
>   is illegal but accepted.
>
> - Similarly for '??????' with the prefix '?' (the word belongs to group
>   E.)
>
> The first of these examples is quiet pedantic, but the other two words
> make no sense.

Thanks for the examples, I'll look into it.

> > > BTW, regarding the usage of the suggestions mechanism, I think it would
> > > be handy if one could go over suggestions in insert mode, in the style
> > > of ^N/^P, instead of choosing from a menu.
> >
> > The user interface might change later.  I first want to make the scoring
> > work well.  Currently the right word is in the first ten suggestions
> > about 80% of the time.  Aspell has that at 90%, thus there is still some
> > work to do...
>
> I wonder how this is measured... As far as I understand the information
> of how often a word occurs in the language does not play any role.
> Perhaps if the suggestions are weighted with this information, this will
> improve the suggestions.

There is a list of misspelled words and their corrections on the Aspell
website, with statistics for Aspell, ispell and MS-Word.  I did a few
tests with this list.  It's not a very good list, since it's only for
English.  And Aspell has apparently been tuned on this list.  But it's a
good way to see what effects tweaking the code has.

For other languages the sound-a-like rules need to be made.  So far I
only found them for English.  It appears only Aspell uses these rules.

--
hundred-and-one symptoms of being an internet addict:
106. When told to "go to your room" you inform your parents that you
     can't...because you were kicked out and banned.

 /// Bram Moolenaar -- [hidden email] -- http://www.Moolenaar.net   \\\
///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
 \\\     Buy LOTR 3 and help AIDS victims -- http://ICCF.nl/lotr.html   ///
Reply | Threaded
Open this post in threaded view
|

Re: spell problems

Bram Moolenaar

I wrote:

> Moshe Kaminsky wrote:
>
> > > That must be a bug.  Can you give me a few examples of words that aren't
> > > flagged as wrong, where the prefix was added even though the .aff file
> > > doesn't allow it?
> >
> > - When prefixing the word '?????' with '?', the '?' should be doubled,
> >   as per line 4 of PFX A: '???????' is correct, '??????' is not. Both
> >   the correct and the wrong versions are accepted.
> >
> > - The word '????' (from group B) can not have '?' as a prefix: '?????'
> >   is illegal but accepted.
> >
> > - Similarly for '??????' with the prefix '?' (the word belongs to group
> >   E.)
> >
> > The first of these examples is quiet pedantic, but the other two words
> > make no sense.
>
> Thanks for the examples, I'll look into it.

I found and fixed two problems: The prefix condition pattern wasn't
anchored at the start of the word causing [^x] to match any word.  And
using zero for the prefix ID caused confusion.

Please try the next snapshot (probably tonight) and try to find any
other problems.

--
hundred-and-one symptoms of being an internet addict:
109. You actually read -- and enjoy -- lists like this.

 /// Bram Moolenaar -- [hidden email] -- http://www.Moolenaar.net   \\\
///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
 \\\     Buy LOTR 3 and help AIDS victims -- http://ICCF.nl/lotr.html   ///
Reply | Threaded
Open this post in threaded view
|

Re: spell problems

Moshe Kaminsky
In reply to this post by Moshe Kaminsky
Hi,

* Bram Moolenaar <[hidden email]> [22/06/05 13:46]:

>
>
> Moshe Kaminsky wrote:
>
> > > I found and fixed two problems: The prefix condition pattern wasn't
> > > anchored at the start of the word causing [^x] to match any word.
> > > And using zero for the prefix ID caused confusion.
> > >
> > > Please try the next snapshot (probably tonight) and try to find any
> > > other problems.
> >
> > I tried the new snapshot. It appears that the first example I
> > described is fixed, but not the second. The prefix group is still not
> > taken into account.
>
> The examples you gave appear to be working OK for me.  Did you generate
> the spell file again?
No, didn't think about it. I see that almost all errors are gone now.
One little thing: some Hebrew letters can have a ' after them, to modify
the way they sound. It happens that an incorrect word is not detected
because the two parts before and after the ' are correct words. This
happens, for example, with the word "הפיג'מת". This is very rare,
though.

>
> > I have some more issues: Some of the prefixes are really rare. I saw
> > there is a way to specify rare words. Is there a way to specify that a
> > suffix is rare?
>
> No, there is no way to mark a prefix as rare.  I think it would become a
> bit complex to support this.

Then I think it is better to support much less prefixes. Some of them
never occur in nature.

>
> > Also, I don't understand how specifying that a word is rare can be
> > combined with specifying affix info.
>
> The rarity applies to the word itself, no matter what prefixes are used
> with it.  If the word is rare only with certain prefixes you have to
> list them specifically.

I just wasn't aware that a word can appear in the .dic file with more
than one affix group.

>
> > Regarding corrections: If a vim function spell() is provided (which
> > just checks whether the spelling of a given word is correct), it
> > might be efficient enough to implement the corrections mechanism in
> > "userspace". This will make it very flexible and easy to experiment.
>
> Don't underestimate the effort it takes to find spelling suggestions.  I
> have a fast PC and for some words it takes more than a second to find
> sound-a-like matches.  And that's only for English, other languages will
> be more complex.  Thus a script solution probably only works to find the
> most obvious suggestions.  Also, a script cannot access the tree with
> all words.
Still, it will be good to have the ability to alter the suggestion
mechanism: for example, in Hebrew a very common mistake is to write "יי"
instead of "י", or vice versa. This is the first kind of mistakes that
hspell checks. I guess I can specify this as a REP entry, but I can't
modify the score for this change.

>
> I did add the spellbadword() function, so that you can use "]s" to move
> to a spelling mistake and grab it.  Then you can use spellsuggest() to
> get a List with suggestions.  I'm using this in a script to compute the
> quality of the suggestions.

I didn't see them. Could be a bit better if spellsuggest() would return
the word itself in the list if the word is correct.

Thanks,
Moshe


>
> --
> hundred-and-one symptoms of being an internet addict:
> 114. You are counting items, you go "0,1,2,3,4,5,6,7,8,9,A,B,C,D...".
>
>  /// Bram Moolenaar -- [hidden email] -- http://www.Moolenaar.net   \\\
> ///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
> \\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
>  \\\     Buy LOTR 3 and help AIDS victims -- http://ICCF.nl/lotr.html   ///
>
--
I love deadlines. I like the whooshing sound they make as they fly by.
                                        -- Douglas Adams
   
    Moshe Kaminsky <[hidden email]>
    Home: 08-9456841


attachment0 (205 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: spell problems

Bram Moolenaar

Moshe Kaminsky wrote:

> No, didn't think about it. I see that almost all errors are gone now.
> One little thing: some Hebrew letters can have a ' after them, to modify
> the way they sound. It happens that an incorrect word is not detected
> because the two parts before and after the ' are correct words. This
> happens, for example, with the word "????'??". This
> is very rare, though.

It would be possible to make ' a word character.  Then Vim will not
accept a word that ends before it.  But at the same time this will
probably cause trouble for where single quotes are used for quoting.

Aspell has the "special" item defined for this.  I have been wondering
if we need to do something with it.  So far I have been thinking that in
most situations a word where the ' is used in a wrong place will result
in the word after it being marked bad.  This happens in English, for
example: In they's the "s" is highlighted.

To detect the situation where the word before and after the ' is OK we
could check for a word character after the '.  That means a they' would
go unnoticed, but they'there won't.

Do we need to be able to enable/disable this in the .aff file?  I
suppose we do.  For some languages - needs to be handled the same way.

> > > I have some more issues: Some of the prefixes are really rare. I saw
> > > there is a way to specify rare words. Is there a way to specify that a
> > > suffix is rare?
> >
> > No, there is no way to mark a prefix as rare.  I think it would become a
> > bit complex to support this.
>
> Then I think it is better to support much less prefixes. Some of them
> never occur in nature.

This means we can't use the Myspell files for Hebrew as-is.  Perhaps we
can use some script to translate it?  Thus remove the prefixes that are
almost never used and add a few words that include those prefixes where
they are used.  Perhaps this can be done in the context of the hspell
group, to avoid duplicating the effort.

> I just wasn't aware that a word can appear in the .dic file with more
> than one affix group.

That is possible.  It's even possible to combine prefixes and affixes.
But only prefixes can be postponed.

> Still, it will be good to have the ability to alter the suggestion
> mechanism: for example, in Hebrew a very common mistake is to write
> "??" instead of "?", or vice versa. This is the first kind
> of mistakes that hspell checks. I guess I can specify this as a REP
> entry, but I can't modify the score for this change.

This is inserting or deleting a character.  The score for a REP
replacement isn't much different.

What I could do as a generic scoring mechanism is give a better score to
doubling a character or removing a duplicate.  The sound-a-like scoring
already does that, but that isn't used for Hebrew and when
'spellsuggest' is "fast".

I just implemented that and with my test file the result is that more
often the right word appears first in the list of suggestions (score
goes from 65% to 68%).  There are no drawbacks, the score for the word
appearing in the first 10 suggestions is the same.

> > I did add the spellbadword() function, so that you can use "]s" to move
> > to a spelling mistake and grab it.  Then you can use spellsuggest() to
> > get a List with suggestions.  I'm using this in a script to compute the
> > quality of the suggestions.
>
> I didn't see them. Could be a bit better if spellsuggest() would return
> the word itself in the list if the word is correct.

The word itself is currently explicitly excluded from the suggestions.
But I can change that.  Then spellsuggest() can also be used to check
the spelling of a word.

--
hundred-and-one symptoms of being an internet addict:
151. You find yourself engaged to someone you've never actually met,
     except through e-mail.

 /// Bram Moolenaar -- [hidden email] -- http://www.Moolenaar.net   \\\
///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
 \\\     Buy LOTR 3 and help AIDS victims -- http://ICCF.nl/lotr.html   ///
Reply | Threaded
Open this post in threaded view
|

Re: spell problems

Moshe Kaminsky
* Bram Moolenaar <[hidden email]> [25/06/05 16:19]:

>
>
> Moshe Kaminsky wrote:
>
> > No, didn't think about it. I see that almost all errors are gone now.
> > One little thing: some Hebrew letters can have a ' after them, to modify
> > the way they sound. It happens that an incorrect word is not detected
> > because the two parts before and after the ' are correct words. This
> > happens, for example, with the word "הפיג'מת". This
> > is very rare, though.
>
> It would be possible to make ' a word character.  Then Vim will not
> accept a word that ends before it.  But at the same time this will
> probably cause trouble for where single quotes are used for quoting.
>
> Aspell has the "special" item defined for this.  I have been wondering
> if we need to do something with it.  So far I have been thinking that in
> most situations a word where the ' is used in a wrong place will result
> in the word after it being marked bad.  This happens in English, for
> example: In they's the "s" is highlighted.
>
> To detect the situation where the word before and after the ' is OK we
> could check for a word character after the '.  That means a they' would
> go unnoticed, but they'there won't.
I think that's the right solution. The only way a ' may occur between
two words is when this is actually one word. And they' is accepted now
as well, on the ground that may occur at the of quoted text.

On the other hand, as I mentioned, these cases should be quite rare.
Another point is that it might have been meant that Unicode character
0x05f3 (׳) is used in that role, instead of '.

>
> Do we need to be able to enable/disable this in the .aff file?  I
> suppose we do.  For some languages - needs to be handled the same way.
>
> > > > I have some more issues: Some of the prefixes are really rare. I saw
> > > > there is a way to specify rare words. Is there a way to specify that a
> > > > suffix is rare?
> > >
> > > No, there is no way to mark a prefix as rare.  I think it would become a
> > > bit complex to support this.
> >
> > Then I think it is better to support much less prefixes. Some of them
> > never occur in nature.
>
> This means we can't use the Myspell files for Hebrew as-is.  Perhaps we
> can use some script to translate it?  Thus remove the prefixes that are
> almost never used and add a few words that include those prefixes where
> they are used.  Perhaps this can be done in the context of the hspell
> group, to avoid duplicating the effort.
The program that generates the Myspell files is part of the hspell
distribution. It uses a simple list of prefixes as an input, so it's
easy to modify. It's a matter of deciding which prefixes to exclude. I
think it's also possible to declare a small number of prefixes as rare,
and add all the words with them as rare to the .dic file.

>
> > I just wasn't aware that a word can appear in the .dic file with more
> > than one affix group.
>
> That is possible.  It's even possible to combine prefixes and affixes.
> But only prefixes can be postponed.
>
> > Still, it will be good to have the ability to alter the suggestion
> > mechanism: for example, in Hebrew a very common mistake is to write
> > "יי" instead of "י", or vice versa. This is the first kind
> > of mistakes that hspell checks. I guess I can specify this as a REP
> > entry, but I can't modify the score for this change.
>
> This is inserting or deleting a character.  The score for a REP
> replacement isn't much different.
>
> What I could do as a generic scoring mechanism is give a better score to
> doubling a character or removing a duplicate.  The sound-a-like scoring
> already does that, but that isn't used for Hebrew and when
> 'spellsuggest' is "fast".
>
> I just implemented that and with my test file the result is that more
> often the right word appears first in the list of suggestions (score
> goes from 65% to 68%).  There are no drawbacks, the score for the word
> appearing in the first 10 suggestions is the same.
What I meant is that this mistake occurs a lot with that specific
character. I guess that in English as well, doubling 'u' does not have
the same probability as doubling 'r'.

>
> > > I did add the spellbadword() function, so that you can use "]s" to move
> > > to a spelling mistake and grab it.  Then you can use spellsuggest() to
> > > get a List with suggestions.  I'm using this in a script to compute the
> > > quality of the suggestions.
> >
> > I didn't see them. Could be a bit better if spellsuggest() would return
> > the word itself in the list if the word is correct.
>
> The word itself is currently explicitly excluded from the suggestions.
> But I can change that.  Then spellsuggest() can also be used to check
> the spelling of a word.
Yes, that's what I meant.

Thanks,
Moshe

>
> --
> hundred-and-one symptoms of being an internet addict:
> 151. You find yourself engaged to someone you've never actually met,
>      except through e-mail.
>
>  /// Bram Moolenaar -- [hidden email] -- http://www.Moolenaar.net   \\\
> ///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
> \\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
>  \\\     Buy LOTR 3 and help AIDS victims -- http://ICCF.nl/lotr.html   ///
>
--
I love deadlines. I like the whooshing sound they make as they fly by.
                                        -- Douglas Adams
   
    Moshe Kaminsky <[hidden email]>
    Home: 08-9456841


attachment0 (205 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: spell problems

Moshe Kaminsky
In reply to this post by Moshe Kaminsky
Hi,

* Bram Moolenaar <[hidden email]> [22/06/05 13:46]:
> Moshe Kaminsky wrote:
> > I have some more issues: Some of the prefixes are really rare. I saw
> > there is a way to specify rare words. Is there a way to specify that
> > a suffix is rare?
>
> No, there is no way to mark a prefix as rare.  I think it would become a
> bit complex to support this.
>

I looked at the code a bit. It appears to be quite simple to add flags
for prefixes: The function valid_word_prefix() will return flags for the
prefix. These flags will be |-ed with the flags variable in find_word().
The flags for each prefix can be stored in the highest byte of each item
in sl_pidxs (as far as I could see, it's not used, currently). I didn't
look at storing this in the file, or specifying this in the .aff file.
If you think it's reasonable, I can try to implement it.

Thanks,
Moshe

attachment0 (205 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: spell problems

Bram Moolenaar

Moshe Kaminsky wrote:

> * Bram Moolenaar <[hidden email]> [22/06/05 13:46]:
> > Moshe Kaminsky wrote:
> > > I have some more issues: Some of the prefixes are really rare. I saw
> > > there is a way to specify rare words. Is there a way to specify that
> > > a suffix is rare?
> >
> > No, there is no way to mark a prefix as rare.  I think it would become a
> > bit complex to support this.
>
> I looked at the code a bit. It appears to be quite simple to add flags
> for prefixes: The function valid_word_prefix() will return flags for the
> prefix. These flags will be |-ed with the flags variable in find_word().
> The flags for each prefix can be stored in the highest byte of each item
> in sl_pidxs (as far as I could see, it's not used, currently). I didn't
> look at storing this in the file, or specifying this in the .aff file.
> If you think it's reasonable, I can try to implement it.

Storing the flags is the easy part.  The big question is how to mark an
affix as rare in the .aff file.  I guess this can't be done with the
affix letter, it must be on the specific affix.  Otherwise it would be
possible to mark the word rare and you already mentioned that's not so.

A way that Myspell would ignore is adding another item after the
condition:

        PFX C   0 ????? ?[^?]  rare

Then the .spl file format needs to be updated, but that's not very
difficult.

Is it worth doing this?

--
hundred-and-one symptoms of being an internet addict:
162. You go outside and look for a brightness knob to turn down the sun.

 /// Bram Moolenaar -- [hidden email] -- http://www.Moolenaar.net   \\\
///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
 \\\     Buy LOTR 3 and help AIDS victims -- http://ICCF.nl/lotr.html   ///
Reply | Threaded
Open this post in threaded view
|

Re: spell problems

Moshe Kaminsky
* Bram Moolenaar <[hidden email]> [27/06/05 10:57]:

>
> Moshe Kaminsky wrote:
>
> > * Bram Moolenaar <[hidden email]> [22/06/05 13:46]:
> > > Moshe Kaminsky wrote:
> > > > I have some more issues: Some of the prefixes are really rare. I saw
> > > > there is a way to specify rare words. Is there a way to specify that
> > > > a suffix is rare?
> > >
> > > No, there is no way to mark a prefix as rare.  I think it would become a
> > > bit complex to support this.
> >
> > I looked at the code a bit. It appears to be quite simple to add flags
> > for prefixes: The function valid_word_prefix() will return flags for the
> > prefix. These flags will be |-ed with the flags variable in find_word().
> > The flags for each prefix can be stored in the highest byte of each item
> > in sl_pidxs (as far as I could see, it's not used, currently). I didn't
> > look at storing this in the file, or specifying this in the .aff file.
> > If you think it's reasonable, I can try to implement it.
>
> Storing the flags is the easy part.  The big question is how to mark an
> affix as rare in the .aff file.  I guess this can't be done with the
> affix letter, it must be on the specific affix.  Otherwise it would be
> possible to mark the word rare and you already mentioned that's not so.
That is correct. Each prefix letter corresponds to many prefixes. The
only meaning of the prefix letter is the set of words to which it can be
applied. To have one letter per prefix would mean about 480 of them.

>
> A way that Myspell would ignore is adding another item after the
> condition:
>
> PFX C   0 åëùáå å[^å]  rare
>
> Then the .spl file format needs to be updated, but that's not very
> difficult.
>
> Is it worth doing this?
I don't know about other languages, for Hebrew I think it's fairly
important. Some of these prefixes are not very useful in everyday life,
but are used, eg, in poetry, or in the bible.

Thanks,
Moshe

>
> --
> hundred-and-one symptoms of being an internet addict:
> 162. You go outside and look for a brightness knob to turn down the sun.
>
>  /// Bram Moolenaar -- [hidden email] -- http://www.Moolenaar.net   \\\
> ///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
> \\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
>  \\\     Buy LOTR 3 and help AIDS victims -- http://ICCF.nl/lotr.html   ///
>
--
I love deadlines. I like the whooshing sound they make as they fly by.
                                        -- Douglas Adams
   
    Moshe Kaminsky <[hidden email]>
    Home: 08-9456841


attachment0 (205 bytes) Download Attachment