[05:54:36] *** Quits: vin-ivar (~vinit@122.169.11.109) (Ping timeout: 272 seconds) [09:44:04] proceeding word-by-word: is there a problem with that? going from GF to apertium, taking one word at a time, and mapping the GF analyses to Apertium tags [09:44:16] (yep he's gone, just writing this to be copypasted later :-P) [09:45:29] for 2000 line parse tree, yep..... >_> there are probably lots of Symbs there, like assuming that "es" or "sabroso" or whatever word is a string literal, and treating it like "el pescado 965" [09:45:57] btw sorry, I forgot to give the PGF, I let it run on my computer yesterday and started doing something else, and then left home after doing that [09:47:39] for the 2000 lines, it's surely not just one parse tree, but many stupid options; does it work if you'd only take the first (or say 5 first and discard if it's crap?) [11:29:54] *** Quits: spectre (~fran@115.114.202.84.customer.cdi.no) (Ping timeout: 250 seconds) [11:36:53] *** Joins: vin-ivar (~vinit@103.48.96.221) [11:43:05] *** Quits: vin-ivar (~vinit@103.48.96.221) (Ping timeout: 256 seconds) [11:55:14] *** Joins: spectre (~fran@dhcp471-ans.wifi.uit.no) [12:48:12] *** Joins: vin-ivar (uid74719@gateway/web/irccloud.com/x-zycbtqlklmwrtyzf) [12:57:40] vin-ivar: http://pastebin.com/Q7FpmrcK [12:59:26] hey inariksit [12:59:45] sorry I vanished, the power's been gone for hours now [12:59:55] yeah, it's multiple parse trees [13:00:14] I'm thinking I'll work with just the head right now [13:00:21] And see how it goes [13:00:43] (once the power's back) :S [13:01:49] no worries about the pgf, I allocated a bunch of swap space and shut down X and it worked \o/ [13:07:22] haha ok cool [13:10:02] Is the first parse tree likely to be the one with the fewest literals? [13:10:33] I'd imagine so [13:10:45] hmm, I think it can be changed with little trouble [13:10:49] so that it doesn't use those [13:11:02] a moment [13:11:12] Okay, it isn't [13:11:15] Look: [13:11:26] (shit photo incoming) [13:12:01] so yeah GFMKT=mkdir -p ../translator && gf $S -make -literal=PN,Symb -probs=$(TPROBSFILE) -gfo-dir ../translator [13:12:21] I can compile a new TranslateSpa.pgf without the -literal=Symb [13:14:46] https://usercontent.irccloud-cdn.com/file/SVrZJ0tl/irccloudcapture1850110434.jpg [13:15:00] oh, that's brilliant [13:15:20] ^that would take years if Haskell weren't lazy :D [13:17:47] ^^ [13:22:54] hmm, it still has the Symbs even if I removed Symb from that line [13:25:31] does that filtering you're doing help? [13:25:36] I mean, do you get sensible results? [13:26:06] well, it helped when I just filtered it through GHCi, got a nice parse tree [13:26:22] But the disambiguator has been running for ~6 minutes [13:26:31] So I'm doing something wrong there :P [13:26:47] I dare say it's not you who's doing something wrong :-P [13:27:14] hmm, I wonder if it would be enough to just take LangSpa and add DictionarySpa there [13:27:24] without all the modifications in TranslateSpa [13:27:33] chunking and other new constructions [13:27:43] How significant are the modifications? [13:27:44] Hmm [13:27:47] Could help [13:27:53] LangSpa is much simpler [13:28:02] yeah [13:28:14] if you keep your sentences simple, then it should be fine [13:28:40] the extensions in Translate* cover more syntactic constructions, and there's chunking if even those don't help [13:28:46] also Translate* is way more ambiguous [13:29:48] Lang doesn't have literals does it? [13:29:56] don't think so [13:30:14] I'm wondering when I should give up on the disambiguation and Ctrl+C [13:30:18] Cool [13:30:37] yeah [13:30:58] for "el pescado es sabroso" 3712 parse trees, 1873 that don't contain Symb [13:31:07] :/ [13:31:46] also some of it might be because there are lexicon entries with empty strings [13:31:53] so they get parsed in "" [13:31:57] Okay, the choice has been taken out of my hands, I got kicked out of the cafe [13:32:03] Hey spectre [13:32:03] D: [13:32:04] shit [13:32:06] hey vin-ivar ! [13:32:08] ChunkPhr (PlusChunk (NP_Nom_Chunk (DetNP (DetQuant DefArt NumSg))) (PlusChunk (AP_Chunk (PastPartAP (VPSlashPrep (UseV trip_up_V) ?8))) (PlusChunk (VPS_Chunk (MkVPS (TTAnt TPres ASimul) PPos (UseComp (CompAP (PositA tasty_A))))) (OneChunk (PConj_Chunk NoPConj))))) [13:32:18] trip_up [13:32:19] :s [13:32:30] The literals are in a lot of the trees [13:32:41] yeah [13:32:50] the tripped up tasty [13:33:16] brb [13:36:33] let's see if we can make some nice function that would already filter the trees when they come from the C world [13:37:17] ah so nice, everything starts with unsafePerformIO $ [13:37:38] D: [13:37:47] poor babies ._. [13:38:04] hahah [13:41:17] Haskell filters <3 [13:41:55] 5:00 PM for "el pescado es sabroso" 3712 parse trees, 1873 that don't contain Symb [13:42:03] Jesus [13:42:08] ._. [13:54:14] oops, I got stuck socialising [13:54:20] harald hammarström is visiting here ^^ [13:55:00] anyway, if you just want to see if it helps, you could try to change the parseWithHeuristics function in PGF2.hsc [13:55:41] return (Right (take 50 exprs)) or something like that [13:55:56] well, with bad luck those would just all be Symb rubbish parses [13:56:15] does it order them by probability [13:56:53] exprs is of type [(Expr,Float)], where the float is the probability [13:59:30] I'll have a look at fromPgfExprEnum [14:05:40] Cool, I'll take a look at it [14:05:54] The disambiguator is done \o/ [14:06:09] (only) 20 minutes [14:10:22] wow [14:23:06] haha [14:23:08] yeah [14:23:21] still, it's a start [14:23:44] I'm using head on the filter so it isn't really all parse trees either [14:24:24] which reminds me, spectre, is there any way to quickly batch translate just words with apertium [14:24:52] Running apertium -d on every word separately made the whole thing a bit inefficient [14:25:06] vin-ivar, you can use the null flush option [14:25:07] -z [14:25:12] or set up an apertium-apy instance [14:25:16] (wihch basically does the same) [14:29:26] cool [14:30:23] *** Joins: chru (~cunger@2001:638:504:20e0:dc40:506e:a807:8794) [14:39:27] vin-ivar: I've been looking around the haskell bindings, it's quite difficult to make any sense to the filtering, they're just some string buffer C stuffs [14:39:41] like if I want to filter in the haskell, I'll need to call show anyway [14:39:52] and I imagine that would be just the same as doing it in your program [14:40:33] well, the probabilities are floats already in the low level FFI functions, I suppose I could set a threshold to them [14:40:48] but it's quite arbitrary, what is a good threshold for different sentences [14:40:52] depends on length etc. [14:43:04] see changes here: https://github.com/inariksit/GF/commit/06e205a2f4418604f11750a96dbda60cf1f1e19a [14:43:31] if you want to experiment, I can give you rights to that repo, it's just my fork of the main GF github mirror [14:51:11] *** Quits: spectre (~fran@dhcp471-ans.wifi.uit.no) (Ping timeout: 250 seconds) [14:53:06] *** Joins: spectre (~fran@dhcp471-ans.wifi.uit.no) [14:57:44] *** Quits: spectre (~fran@dhcp471-ans.wifi.uit.no) (Ping timeout: 245 seconds) [14:59:04] "la comida es deliciosa" -> (PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (MassNP (UseN food_N)) (UseComp (CompAP (PositA toothsome_A)))))) NoVoc,26.1593) [14:59:16] (ok that's only the 5th result :-P) [15:59:23] the power's back \o/ [15:59:58] inariksit: didn't understand a lot of that :P [16:00:11] brb [16:01:00] *** Quits: vin-ivar (uid74719@gateway/web/irccloud.com/x-zycbtqlklmwrtyzf) () [16:01:30] *** Joins: vin-ivar (~vinit@122.179.144.103) [16:02:11] phew [16:02:23] okay, so the disambiguation is pretty decent [16:02:26] hang on [16:03:08] http://paste2.org/XscEHHvO [16:03:31] the analysis was another 1000 line behemoth [16:22:41] okay, disambiguating something for LangSpa [16:22:43] fingers crossed [16:27:43] *** Joins: spectre (~fran@dhcp471-ans.wifi.uit.no) [16:32:38] *** Parts: chru (~cunger@2001:638:504:20e0:dc40:506e:a807:8794) () [16:36:05] *** Quits: vin-ivar (~vinit@122.179.144.103) (Ping timeout: 248 seconds) [16:40:01] *** Quits: spectre (~fran@dhcp471-ans.wifi.uit.no) (Ping timeout: 265 seconds) [16:42:43] *** Joins: spectre (~fran@129.242.93.240) [16:43:27] *** Joins: vin-ivar (~vinit@122.179.144.103) [17:01:00] vin-ivar: grrr only now I realise you're using PGF, not PGF2 [17:01:05] nevermind then :-D [17:01:23] PGF is the haskell runtime, PGF2 haskell bindings for the C runtime [17:01:35] PGF2 should be faster [17:02:21] I'm right now playing around with the probabilities to ensure that Symbs would not get to the top parses [17:03:38] whoops [17:03:43] i'll try doing stuff in PGF2 :D [17:03:53] link to the file you're playing with? [17:05:08] haha no worries, the API for PGF is massively better documented [17:06:04] this is the probabilities file: https://github.com/inariksit/GF/blob/master/lib/src/translator/translate.probs [17:06:26] (I haven't committed anything, just trying out different probs for all that has Symb in it [17:07:09] or if you refer to the file I was playing with in the PGF2 library, this: https://github.com/inariksit/GF/commit/06e205a2f4418604f11750a96dbda60cf1f1e19a [17:07:47] I added parseFilter function, though I'm not convinced it'll make any difference to give the filtering function at that time; it will in any case just be like [17:07:50] noSymbs :: Expr -> Bool [17:07:52] noSymbs e = not $ isInfixOf "Symb" (show e) [17:07:55] which is what you had already :-P [17:08:34] (using that does work, but I just mean that it's probably not faster or anything) [17:09:36] hahahaha, this is wild [17:09:40] cool [17:09:41] I was just putting silly values [17:09:42] (PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant DefArt NumSg) (ApposCN (UseN pee_N) (UsePN (SymbPN (MkSymb "scado"))))) (UseComp (CompNP (UsePN (SymbPN (MkSymb "bueno")))))))) NoVoc,-422.212) [17:10:00] so it parses pescado as pe (like the letter P) + "scado" as literal [17:10:01] haha [17:10:05] -422? [17:10:07] and gives it -422.212 as probability [17:10:10] hahaha wtf [17:10:22] ok, don't do as I do :'D [17:10:28] that looks fun [17:10:58] i'm doing disambiguation for LangSpa, it's been running for around 3 minutes now [17:11:06] hoping for something less than 20 [17:11:07] :D [17:11:23] good luck [17:11:46] it makes my laptop jittery :s [17:12:59] *** Quits: spectre (~fran@129.242.93.240) (Ping timeout: 244 seconds) [17:27:04] *** Joins: spectre (~fran@dhcp471-ans.wifi.uit.no) [17:27:10] *** Joins: vin-ivar_ (uid74719@gateway/web/irccloud.com/x-cntyhginiifispkx) [17:27:48] ugh, power's gone out again, wtf [17:28:36] *** Quits: vin-ivar (~vinit@122.179.144.103) (Ping timeout: 240 seconds) [17:36:38] *** vin-ivar_ is now known as vin-ivar [17:38:30] *** Quits: spectre (~fran@dhcp471-ans.wifi.uit.no) (Ping timeout: 264 seconds) [18:36:29] *** Joins: crazydiamond (~crazydiam@178.141.71.231) [18:55:18] vin-ivar: here's a file where I also removed symb stuff from TranslateSpa.gf; http://www.grammaticalframework.org/~inari/TranslateSpa.pgf [18:55:52] Translate> p "el pescado es bueno" | ? grep Symb | wc 0 0 0 [18:56:14] ooh yay [18:56:16] Thanks! [18:56:20] well, the down side is that there's still 1000+ [18:56:21] Translate> p "el pescado es bueno" | ? wc 1248 36352 347863 [18:56:47] what are they though [18:56:57] :/ [18:57:03] lots of chunks, and lots of different words [18:57:16] I suppose articles mess stuff up a lot? [18:57:24] the fish is good/salutary/unspoilt [18:57:31] articles? [18:57:44] words like the [18:58:12] wait, let me look at some [19:00:03] *** Joins: vinit-ivar (~vinit@122.179.148.92) [19:00:27] yeah I just mean how do you think they mess up things? [19:01:53] hahah, I'm trying to find rare words [19:02:07] so that there wouldn't be so many synonyms and combinatory explosion because of that [19:02:08] Translate> p "el zydeco es acústico " | ? wc 494 12949 123752 [19:02:15] only 494 parses \:D\ [19:02:22] no idea what is zydeco .... [19:04:42] oh, in the GF shell it prints 494, in the PGF2, it seems to be infinite [19:04:52] λ> length $ take 5000 res [19:04:53] 5000 [19:11:20] haha, only 494 [19:11:31] so unambiguous! [19:11:39] :D [19:12:08] my bad about the articles, I was thinking of morph analysis :s [19:12:27] how's PGF2 doing infinite? [19:13:10] *** Quits: vin-ivar (uid74719@gateway/web/irccloud.com/x-cntyhginiifispkx) () [19:13:20] /nick vin-ivar [19:13:22] whoops [19:13:25] *** vinit-ivar is now known as vin-ivar [19:13:42] I don't know, I just noticed that after I collect the results of the parse in res and tried to print length res, it got stuck [19:14:51] that's odd [19:14:58] and I can access 10000th element of it [19:15:05] maybe it's looping [19:15:41] maybe [19:15:59] though the probabilities get worse [19:16:19] i'm wondering why my disambiguator is so slow, doing at least the parsing using PGF is pretty quick [19:16:23] ah [19:16:44] i think I've done somethign stupid somewhere [19:17:07] λ> mapM_ pr [res !! 1000, res !! 10000, res !! 50000] [19:17:07] 68.70708 [19:17:07] 95.09894 [19:17:07] 122.45645 [19:17:33] I can have a look if you want? [19:19:11] sure, it's the same thing that's up on the repository [19:19:18] but don't bother, i don't think it'll be too complicated [19:19:23] ok [19:21:16] I'm wondering how valid picking just head would be if there's like 11,000 parse trees [19:21:18] :s [19:22:12] looking at parse trees without symbols is so satisfying [19:25:24] hihi [19:26:01] so, about head, there is this heuristics thing in the C runtime: http://aclweb.org/anthology/E/E14/E14-1039.pdf [19:26:29] basically tradeoff faster parsing - not necessarily best tree given first [19:26:37] just ctrl+f heuristic in that paper [19:33:20] the disambiguator is pretty slow for me too [19:33:21] real 6m56.334s [19:33:21] user 6m53.329s [19:33:21] sys 0m3.373s [20:05:59] that's still 5x faster than for me [20:06:01] but yeah [20:06:51] heuristics <3 [20:08:43] shit shit [20:12:58] inariksit, what version of GHC do you have, by the way? [20:20:40] 7.6.3 [20:20:47] haha, I managed to do some fancy profiling stuffs [20:20:49] http://pastebin.com/aupYysty [20:20:54] no idea if that is of any help [20:20:59] that was with tiny grammar [20:21:18] running it now with TranslateSpa and el zydeco es acústico [20:21:32] wow [20:21:35] how did you do that? oO [20:21:41] that's insanely helpful [20:21:50] I'll push, sec [20:23:04] hmm ok actually nevermind, it doesn't do anything .... [20:23:20] ok I can push anyway :-D [20:23:27] hm? [20:23:28] I mean, it generated those statistics while printing out nothing [20:24:39] oh, okay [20:24:42] btw [20:24:48] how is the output of the disambiguator? [20:24:57] time constraints aside [20:27:17] https://github.com/inariksit/apertium-gf [20:28:56] so this? [20:28:56] ^la/DefArt<(CPrep>/DefArt<(CPrep>/DefArt/DefArt/DefArt<(CPrep>/DefArt<(CPrep>/DefArt<(CPrep>/DefArt<(CPrep>/DefArt/DefArt/DefArt/DefArt/DefArt<(CPrep>/DefArt ahahahaha [20:30:00] lol [20:30:20] I tested lookupMorpho output in the PGF2 [20:30:21] and [20:30:22] λ> lookupMorpho spa "la" [20:30:23] [("wank_V","p",Infinity),("DefArt","sp Sg Fem Acc",Infinity),("DefArt","sp Sg Fem Nom",Infinity),("youPolFem_Pron","s Acc c1",Infinity),("youPolFem_Pron","s Acc c1",Infinity),("she_Pron","s Acc c1",Infinity),("she_Pron","s Acc c1",Infinity),("la_N","s Sg",Infinity)] [20:31:07] wank? hahahaha [20:32:32] that's the problem with just the analysis though, you get millions of irrelevant analyses [20:32:34] so, anyway, it should be fairly straightforward to get rid of the field names (s, sp) and map stuff like Fem to [20:32:38] yeah [20:32:50] yeah, that part doesn't look too hard [20:33:03] the problem is getting the disambiguator to run without making my laptop blow itself up [20:33:11] yeah :/ [20:33:35] the reason i asked you what your GHC version was [20:33:47] are you using IHaskell? [20:34:08] no [20:34:08] there are problems with PGF and 7.8.2, and problems with IHaskell and 7.6.3 :s [20:34:18] oh :/ [20:34:20] and IHaskell is amazing for stuff like finding out where I messed up [20:34:26] well [20:34:29] i've never actually used it [20:34:42] but it's based on IPython so it's a reasonable guess, haha :D [20:35:20] okay i think i'll go step by step with GHCi and see what's up [20:35:49] yeah, that sounds useful [20:38:45] oh hey now I see what was my problem, just stupid copypaste error >__> running the profiling with something that actually disambiguates [20:39:54] btw, a weird thing; I used as a toy grammar this grammar with "she made her duck" [20:40:14] (ok sec, I'll formulate this better) [20:44:57] input by MorphAnalyser: [20:44:58] dhcp-180128:apertium-gf inari$ ./MorphAnalyser ../../work/testing_git/examples/made_her_duck/Duck.pgf DuckEng "she made her duck" [20:45:00] ^she/she_Pron$ ^made/make_benefactive_V3/make_causative_V2V/make_V2$ ^her/she_Pron/she_Pron$ ^duck/duck_V/duck_N/duck_N$ [20:45:03] input by MorphDisambiguator -- all of these analyses are valid, just with different combinations, but "her" has an illegal analysis (Poss), and none of the other, syntactically valid parses, are included [20:45:08] dhcp-180128:apertium-gf inari$ ./MorphAnalyser ../../work/testing_git/examples/made_her_duck/Duck.pgf DuckEng "she made her duck" | ./MorphDisambiguator ../../work/testing_git/examples/made_her_duck/Duck.pgf DuckEng [20:45:11] ^she/she_Pron$ ^made/make_causative_V2V$ ^her/she_Pron/she_Pron$ ^duck/duck_V$ [20:50:10] wait [20:50:13] why is Poss illegal? [20:50:21] her duck = possessive her, right? [20:51:59] yeah, but it chooses the duck_V [20:52:47] now I just started reinstalling all my dependencies with --enable-library-profiling [20:52:51] ah whoops [20:53:00] still trying to make it say something >__> [20:53:16] she made her duck is a great sentence, now that i think about it :D [20:53:40] yeah :-D I got it from some introductory textbook in computational linguistics [20:54:07] did you have any luck with your ghci investigations? [20:54:14] still on it [20:54:16] yeah [20:54:25] what are some good textbooks? i need to start reading more :s [20:54:35] on comp ling, i mean [20:54:37] it makes more sense that you look at your code that you know well, I'll try to see if the ghc profiling stuff would give something sensible [20:54:42] yeah [20:54:48] and also have it look at the libraries I use [20:54:50] it's a pain working out somebody else's code [20:54:53] s/I/you/ [20:55:07] especially uncommented code :s [20:56:20] have you read this? http://www.cs.colorado.edu/~martin/slp.html [20:56:47] that's the only one I have :D [20:56:50] read parts of it [20:56:52] it's pretty cool [20:57:01] ^^ [20:57:11] isn't that the standard text? [20:57:14] yeah [20:59:14] okay, so running the disambiguator on just one word (but with the whole sentence for context) [20:59:28] it's spitting out valid analyses at like 2 per second [20:59:44] λ> initStream p l s "como" [20:59:46] "^como/what_name_QCl<(RNeg>/what_name_QCl<(RNeg>/what_name_QCl<(RNeg>/what_name_QCl<(RNeg>/what_name_QCl/what_name_QCl/what_name_QCl<(RNeg>/what_name_QCl<(RNeg>/what_na [20:59:48] me_QCl<(RNeg>/what_name_QCl<(RNeg>/what_name_QCl/what_name_QCl etc [21:01:40] cool! [21:01:55] I managed to reinstall the dependencies, now running profiling again [21:02:11] (also, I looked up what is zydeco, only after using it in my examples n times: [21:02:18] "Zydeco is a musical genre evolved in southwest Louisiana by French Creole speakers[1] which blends blues, rhythm and blues, and music indigenous to the Louisiana Creoles and the Native people of Louisiana." ) [21:02:44] wut [21:02:46] hahaha [21:04:02] i'm not sure how valid these analyses are^ [21:04:13] i'm the furthest thing from a spanish expert [21:04:37] those come from the module Construction.gf [21:05:30] should hide that too when making the reduced TranslateSpa [21:06:36] I can do it, since your computer is slower [21:07:10] that'd be cool [21:07:18] s/slower/slow as hell [21:07:44] :/ [21:07:45] yeah [21:08:07] so most of these parses are coming from Construction.gf? [21:08:27] all of those that you pasted [21:08:36] that's just the what_name_QCl [21:09:30] what exactly is it, though? [21:09:33] ^stupid question [21:10:35] http://www.grammaticalframework.org/~inari/TranslateSpa.pgf new version [21:10:54] it's not a stupid question :) in construction, there are things that are more high level [21:11:15] so like "cómo te llamas" is not parsed as first cómo as pronoun, llamas as verb [21:11:27] but just that string as a question clause [21:14:30] ah [21:14:34] I see [21:14:36] thanks :) [21:14:52] okay, the pgf file is a bunch of json, how? oO [21:15:14] no idea [21:15:15] :-P [21:18:15] ok, now I managed to get something: https://github.com/inariksit/apertium-gf/blob/master/profiling.prof [21:19:12] I imagine "entries" means how many times a function was called [21:19:33] yeah [21:20:41] ooh [21:20:44] jesus [21:20:46] i'm an idiot [21:20:48] hang on [21:22:02] haha this is exciting [21:22:35] i'm calling getMorph all the time! [21:22:48] it's so unnecessary [21:22:54] the morpho doesn't change :D [21:23:06] this is where functional programmng isn't wonderful :P [21:23:50] wonderful that it doesn't change? [21:23:53] or what do you mean :-D [21:24:20] i'm so used to thinking about everything in terms of functions when I'm doing haskell [21:24:31] instead of storing the result of getMorph in a variable like i would have done in python [21:24:38] i'm calling it every other millisecond [21:24:43] haha ok [21:34:00] *** Joins: myoriel (~Myoriel@aftr-88-217-181-118.dynamic.mnet-online.de) [21:37:30] damn, no significant performance increase :s [21:38:29] *** Quits: myoriel (~Myoriel@aftr-88-217-181-118.dynamic.mnet-online.de) (Ping timeout: 248 seconds) [21:42:51] well, you could just use a smaller grammar while you develop it [21:42:56] http://www.grammaticalframework.org/~inari/LangSpa.pgf [21:43:40] going now [21:43:42] good luck! [21:43:48] thanks! [21:44:00] i'm off to bed in a bit as well, i'll figure out what the problem is tomorrow [21:44:09] hopefully with electricity around :s [22:01:47] okay, so around 68% of the program time is under isValid [22:01:58] to be more precise, parse [22:16:52] *** Quits: vin-ivar (~vinit@122.179.148.92) (Read error: No route to host) [22:18:06] *** Joins: vin-ivar (~vinit@122.179.148.92) [22:28:50] okay, I think I did it! [22:28:53] :D [22:29:05] committing my super ghetto disambiguator for now [22:29:53] it's extremely quick, got the analysis for a word in a fraction of a second \o/ [22:30:00] as opposed to like 2 minutes