diff --git a/src/3-three/verbs/api/conjugate/toInfinitive.js b/src/3-three/verbs/api/conjugate/toInfinitive.js new file mode 100644 index 0000000..d06df7c --- /dev/null +++ b/src/3-three/verbs/api/conjugate/toInfinitive.js @@ -0,0 +1,30 @@ +import { doDoes, getTense } from '../lib.js' +const keep = { tags: true } + +// all verb forms are the same +const toInf = function (vb, parsed) { + const { toInfinitive } = vb.methods.two.transform.verb + const { root, auxiliary } = parsed + const aux = auxiliary.terms().harden() + let str = root.text('normal') + str = toInfinitive(str, vb.model, getTense(root)) + if (str) { + vb.replace(root, str, keep).tag('Verb').firstTerm().tag('Infinitive') + } + // remove any auxiliary terms + if (aux.found) { + vb.remove(aux) + } + // there is no real way to do this + // 'i not walk'? 'i walk not'? + if (parsed.negative.found) { + if (!vb.has('not')) { + vb.prepend('not') + } + const does = doDoes(vb, parsed) + vb.prepend(does) + } + vb.fullSentence().compute(['freeze', 'lexicon', 'preTagger', 'postTagger', 'unfreeze', 'chunks']) + return vb +} +export default toInf diff --git a/tests/three/verbs/toInfinitive.test.js b/tests/three/verbs/toInfinitive.test.js new file mode 100644 index 0000000..f45285c --- /dev/null +++ b/tests/three/verbs/toInfinitive.test.js @@ -0,0 +1,496 @@ +import test from 'tape' +import nlp from '../_lib.js' +const here = '[three/verb-toInfinitive] ' + +test('toInfinitive-phrase:', function (t) { + const arr = [ + ['he walked', 'he walk'], + ['i walked', 'i walk'], + ['we walked', 'we walk'], + ['they walked', 'they walk'], + ['the friends walked', 'the friends walk'], + ['the friend walked', 'the friend walk'], + ['our users walked', 'our users walk'], + ['our user walked', 'our user walk'], + ['the eye closed', 'the eye close'], + ['the eyes closed', 'the eyes close'], + ['their colloseum will open', 'their colloseum open'], + ['their children will open', 'their children open'], + ['he walks', 'he walk'], + ['he walked', 'he walk'], + ['he will walk', 'he walk'], + ['he is walking', 'he walk'], + ['he was walking', 'he walk'], + ['i am walking', 'i walk'], + ['he will be walking', 'he walk'], + ['he has walked', 'he walk'], + ['he had walked', 'he walk'], + ['he will have walked', 'he walk'], + ['he has been walking', 'he walk'], + ['he had been walking', 'he walk'], + ['he will have been walking', 'he walk'], + ['got walked', 'walk'], + ['was walked', 'walk'], + ['were walked', 'walk'], + ['i was being walked', 'i walk'], + ['had been walked', 'walk'], + ['have been walked', 'walk'], + ['is walked', 'walk'], + ['are walked', 'walk'], + ['is being walked', 'walk'], + ['she has been walked', 'she walk'], + ['had been walked', 'walk'], + ['will have been walked', 'walk'], + ['will be walked', 'walk'], + ['would be walked', 'walk'], + ['would have been walked', 'walk'], + ['is going to walk', 'walk'], + ['did walk', 'walk'], + ['used to walk', 'walk'], + ['do walk', 'walk'], + ['does walk', 'walk'], + + // negatives + ['i did not walk', 'i do not walk'], + ['we did not walk', 'we do not walk'], + ['he did not walk', 'he does not walk'], + ['i was not being walked', 'i do not walk'], + ['i had not walked', 'i do not walk'], + ['I will do that', 'I do that'], + ['I will not do that', 'I do not do that'], + ["I won't do that", 'I do not do that'], + // ['I will never do that', 'I do not do that'], + + // want-infinitive + // ['he wants to walk', 'he want to walk'], + // ['he wanted to walk', 'he want to walk'], + // ['he will want to walk', 'he want to walk'], + // adverbs + // ['i was really not being walked', 'i do really not walk'], + // ['i was not really being walked', 'i do not really walk'], + ['i was being really not walked', 'i do really not walk'], + ['i was being not really walked', 'i do not really walk'], + ['he was not going to walk', 'he does not walk'], + ['we are putting', 'we put'], + // from particple + ['overthrown', 'overthrow'], + ['thrown', 'throw'], + // ["overgrown", "overgrow"], + ['flown', 'fly'], + ['shown', 'show'], + ['sown', 'sow'], + ['sworn', 'swear'], + // ["worn", "wear"], + ['forgotten', 'forget'], + ['bitten', 'bite'], + ['stolen', 'steal'], + // ["shrunk", "shrink"], + + ['upheld', 'uphold'], + ['withheld', 'withhold'], + ['dyed', 'dye'], + ['gutted', 'gut'], + ['slotted', 'slot'], + ['allotted', 'allot'], + ['dotted', 'dot'], + ['acquitted', 'acquit'], + ['knitted', 'knit'], + ['transmitted', 'transmit'], + ['permitted', 'permit'], + ['omitted', 'omit'], + ['committed', 'commit'], + ['remitted', 'remit'], + ['emitted', 'emit'], + ['admitted', 'admit'], + ['submitted', 'submit'], + ['outfitted', 'outfit'], + ['benefitted', 'benefit'], + ['he fitted', 'he fit'], + ['vetted', 'vet'], + ['persuaded', 'persuade'], + ['netted', 'net'], + ['formatted', 'format'], + ['tasted', 'taste'], + ['he quoted', 'he quote'], + ['consulted', 'consult'], + ['resulted', 'result'], + ['catapulted', 'catapult'], + ['defaulted', 'default'], + ['wilted', 'wilt'], + ['tilted', 'tilt'], + ['salted', 'salt'], + ['malted', 'malt'], + ['exited', 'exit'], + ['he excited', 'he excite'], + ['deposited', 'deposit'], + ['transited', 'transit'], + ['revisited', 'revisit'], + ['visited', 'visit'], + ['inherited', 'inherit'], + ['solicited', 'solicit'], + ['expedited', 'expedite'], + ['marketed', 'market'], + ['skyrocketed', 'skyrocket'], + ['acted', 'act'], + ['accentuated', 'accentuate'], + ['situated', 'situate'], + ['perpetuated', 'perpetuate'], + ['fluctuated', 'fluctuate'], + ['evaluated', 'evaluate'], + ['graduated', 'graduate'], + ['abbreviated', 'abbreviate'], + ['alleviated', 'alleviate'], + ['deviated', 'deviate'], + ['renegotiated', 'renegotiate'], + ['negotiated', 'negotiate'], + ['differentiated', 'differentiate'], + ['substantiated', 'substantiate'], + ['self-initiated', 'self-initiate'], + ['initiated', 'initiate'], + ['satiated', 'satiate'], + ['expropriated', 'expropriate'], + ['appropriated', 'appropriate'], + ['affiliated', 'affiliate'], + ['conciliated', 'conciliate'], + ['repudiated', 'repudiate'], + ['mediated', 'mediate'], + ['enunciated', 'enunciate'], + ['created', 'create'], + ['warehoused', 'warehouse'], + ['kissed', 'kiss'], + ['missed', 'miss'], + ['spurred', 'spur'], + ['blurred', 'blur'], + ['incurred', 'incur'], + ['occurred', 'occur'], + ['deterred', 'deter'], + ['transferred', 'transfer'], + ['conferred', 'confer'], + ['inferred', 'infer'], + ['referred', 'refer'], + ['marred', 'mar'], + ['jarred', 'jar'], + ['scarred', 'scar'], + ['barred', 'bar'], + ['quickly scored', 'quickly score'], + ['quickly favored', 'quickly favor'], + ['quickly monitored', 'quickly monitor'], + ['quickly factored', 'quickly factor'], + ['quickly co-sponsored', 'quickly co-sponsor'], + ['quickly sponsored', 'quickly sponsor'], + ['quickly mirrored', 'quickly mirror'], + ['quickly anchored', 'quickly anchor'], + ['quickly stopped', 'quickly stop'], + ['quickly topped', 'quickly top'], + ['quickly popped', 'quickly pop'], + ['quickly chopped', 'quickly chop'], + ['quickly sipped', 'quickly sip'], + ['outstripped quickly', 'outstrip quickly'], + ['stripped quickly', 'strip quickly'], + ['whipped', 'whip'], + ['transshipped', 'transship'], + ['worshipped', 'worship'], + ['shipped', 'ship'], + ['dipped', 'dip'], + ['stepped', 'step'], + ['tapped', 'tap'], + ['unwrapped', 'unwrap'], + ['shrinkwrapped', 'shrinkwrap'], + ['wrapped', 'wrap'], + ['strapped', 'strap'], + ['scrapped', 'scrap'], + ['snapped', 'snap'], + ['mapped', 'map'], + ['revamped', 'revamp'], + ['stamped', 'stamp'], + ['clamped', 'clamp'], + ['helped', 'help'], + ['seeped', 'seep'], + ['reaped', 'reap'], + ['banned', 'ban'], + ['frowned', 'frown'], + ['drowned', 'drown'], + ['crowned', 'crown'], + ['browned', 'brown'], + ['downed', 'down'], + ['wholly-owned', 'wholly-own'], + ['co-owned', 'co-own'], + ['owned', 'own'], + ['pawned', 'pawn'], + ['attuned', 'attune'], + ['tuned', 'tune'], + ['boned', 'bone'], + ['twinned', 'twin'], + ['underpinned', 'underpin'], + ['skinned', 'skin'], + ['thinned', 'thin'], + ['spanned', 'span'], + ['panned', 'pan'], + ['scanned', 'scan'], + ['canned', 'can'], + ['intertwined', 'intertwine'], + ['entwined', 'entwine'], + ['destined', 'destine'], + ['quarantined', 'quarantine'], + ['enshrined', 'enshrine'], + ['predetermined', 'predetermine'], + ['undermined', 'undermine'], + ['examined', 'examine'], + ['mined', 'mine'], + ['outlined', 'outline'], + ['underlined', 'underline'], + ['streamlined', 'streamline'], + ['sidelined', 'sideline'], + ['inclined', 'incline'], + ['declined', 'decline'], + ['lined', 'line'], + ['machined', 'machine'], + ['imagined', 'imagine'], + ['confined', 'confine'], + ['quickly defined', 'quickly define'], + ['fined', 'fine'], + ['dined', 'dine'], + ['convened', 'convene'], + ['caned', 'cane'], + ['annulled', 'annul'], + ['extolled', 'extol'], + ['quickly leveled', 'quickly level'], + ['travelled', 'travel'], + ['expelled', 'expel'], + ['dispelled', 'dispel'], + ['compelled', 'compel'], + ['funnelled', 'funnel'], + ['channelled', 'channel'], + ['cancelled', 'cancel'], + ['rivalled', 'rival'], + ['profiled', 'profile'], + ['scaled', 'scale'], + ['baled', 'bale'], + ['invoked', 'invoke'], + ['revoked', 'revoke'], + ['choked', 'choke'], + ['he spiked', 'he spike'], + ['mimicked', 'mimic'], + ['flaked', 'flake'], + // ["baked", "bake"], + ['guaranteed', 'guarantee'], + ['agreed', 'agree'], + ['freed', 'free'], + ['fed', 'feed'], + ['reworded', 'reword'], + ['worded', 'word'], + ['afforded', 'afford'], + ['forwarded', 'forward'], + ['rewarded', 'reward'], + ['safely guarded', 'safely guard'], + ['regarded', 'regard'], + ['discarded', 'discard'], + ['carded', 'card'], + ['bombarded', 'bombard'], + ['ended', 'end'], + ['aided', 'aid'], + ['plodded', 'plod'], + ['skidded', 'skid'], + ['embedded', 'embed'], + ['dissuaded', 'dissuade'], + ['persuaded', 'persuade'], + ['dubbed', 'dub'], + ['bobbed', 'bob'], + ['ribbed', 'rib'], + ['swabbed', 'swab'], + ['stabbed', 'stab'], + ['nabbed', 'nab'], + ['opened', 'open'], + // ["resold", "resell"], + ['blitzed', 'blitz'], + ['overpaid', 'overpay'], + ['marketed', 'market'], + ['skyrocketed', 'skyrocket'], + ['ticketed', 'ticket'], + ['aroused', 'arouse'], + ['espoused', 'espouse'], + ['warehoused', 'warehouse'], + ['created', 'create'], + ['acquired', 'acquire'], + ['aired', 'air'], + ['persevered', 'persevere'], + ['imprisoned', 'imprison'], + ['poisoned', 'poison'], + ['he seasoned', 'he season'], + ['combed', 'comb'], + ['climbed', 'climb'], + ['succumbed', 'succumb'], + ['decreed', 'decree'], + ['hacked', 'hack'], + ['clocked', 'clock'], + ['blocked', 'block'], + ['linked', 'link'], + ['tasked', 'task'], + ['reckoned', 'reckon'], + ['shouted', 'shout'], + ['poured', 'pour'], + ['aroused', 'arouse'], + ['decreed', 'decree'], + ['freed', 'free'], + + // ["interpreted", "interpret"], + // ["longed", "long"], + // ["intervened", "intervene"], + // ["stoned", "stone"], + // ["phoned", "phone"], + // ["overtaken", "overtake"], + // ["undertaken", "undertake"], + // ["taken", "take"], + // ["overseen", "oversee"], + // ["foreseen", "foresee"], + // ["overridden", "override"], + // ["forbidden", "forbid"], + // ["withstood", "withstand"], + // ["ground", "grind"], + // ["acquired", "acquire"], + // ["aired", "air"], + // ["adhered", "adhere"], + // ["ill-equipped", "ill-equip"], + // ["equipped", "equip"], + // ["underdeveloped", "underdevelop"], + // ["well-developed", "well-develop"], + // ["foreign-owned", "foreign-own"], + + ['he forecasted', 'he forecast'], + ['he misunderstood', 'he misunderstand'], + ['he blasted', 'he blast'], + ['he ignited', 'he ignite'], + ['he permeated', 'he permeate'], + ['he recreated', 'he recreate'], + ['he praised', 'he praise'], + ['he explored', 'he explore'], + ['he layered', 'he layer'], + ['he answered', 'he answer'], + ['he lowered', 'he lower'], + ['he severed', 'he sever'], + ['he leaked', 'he leak'], + ['he buttered', 'he butter'], + ['he uttered', 'he utter'], + ['he cleaned', 'he clean'], + ['he rained', 'he rain'], + ['he joined', 'he join'], + ['he ruined', 'he ruin'], + ['he postponed', 'he postpone'], + ['he pondered', 'he ponder'], + ['he triggered', 'he trigger'], + ['he checkered', 'he checker'], + ['he slaughtered', 'he slaughter'], + ['he chartered', 'he charter'], + ['he sequestered', 'he sequester'], + ['he bolstered', 'he bolster'], + ['he mustered', 'he muster'], + ['he benefited', 'he benefit'], + ['he credited', 'he credit'], + ['he deposited', 'he deposit'], + ['he edited', 'he edit'], + ['he exhibited', 'he exhibit'], + ['he exploited', 'he exploit'], + ['he inherited', 'he inherit'], + ['he prohibited', 'he prohibit'], + ['he recruited', 'he recruit'], + ['he submited', 'he submit'], + ['he suited', 'he suit'], + ['he visited', 'he visit'], + ['he vomited', 'he vomit'], + ['he waited', 'he wait'], + ['he cited', 'he cite'], + ['he excited', 'he excite'], + ['he invited', 'he invite'], + ['he recited', 'he recite'], + + // gerund -> infinitive + ['coming', 'come'], + ['joking', 'joke'], + ['poking', 'poke'], + ['naming', 'name'], + ['tuning', 'tune'], + ['hazing', 'haze'], + //phrasal + ['hazing over', 'haze over'], + // ['hazing-over', 'haze-over'], + + // pastTense -> infinitive + ['came', 'come'], + ['named', 'name'], + ['moved', 'move'], + ['joked', 'joke'], + ['poked', 'poke'], + ['hooping', 'hoop'], + ['ached', 'ache'], + ['tuned', 'tune'], + //phrasal + ['hazed over', 'haze over'], + // ['hazed-over', 'haze-over'], + + // ["have been working non-stop on the project", `To have been working non-stop on the project`], + // ["will be leaving early tomorrow", `To be leaving early tomorrow`], + // ["had just finished washing the dishes", `To have just finished washing the dishes`], + // ["should have checked the details more carefully", `To have checked the details more carefully`], + // ["can easily solve the puzzle", `To be able to solve the puzzle easily`], + // ["might have been waiting at the wrong place", `To have been waiting at the wrong place`], + // ["would have gone to the event if invited", `To have gone to the event if invited`], + // ["should be preparing for the presentation", `To be preparing for the presentation`], + // ["is trying to learn Spanish", `To be trying to learn Spanish`], + // ["has been thinking about changing careers", `To have been thinking about changing careers`], + // ["have been considering a new strategy", `To have been considering a new strategy`], + // ["will be going to the concert tonight", `To be going to the concert tonight`], + // ["was just making a cup of coffee", `To have just made a cup of coffee`], + // ["must have forgotten the appointment", `To have forgotten the appointment`], + // ["can jump higher than anyone else", `To be able to jump higher than anyone else`], + // ["could have been mistaken about the time", `To have been mistaken about the time`], + // ["would be flying to Paris next month", `To be flying to Paris next month`], + // ["should have started the project earlier", `To have started the project earlier`], + // ["is planning to visit the museum", `To be planning to visit the museum`], + // ["has been dreaming about a vacation", `To have been dreaming about a vacation`], + // ["might be moving to a different city", `To be moving to a different city`], + // ["was reading a fascinating book", `To have read a fascinating book`], + // ["could play the guitar beautifully", `To be able to play the guitar beautifully`], + // ["will have finished the report by tomorrow", `To have finished the report by tomorrow`], + // ["has been working out regularly", `To have been working out regularly`], + // ["was going to call you later", `To have been going to call you later`], + // ["might have left the keys in the car", `To have left the keys in the car`], + // ["is starting to understand the concept", `To be starting to understand the concept`], + // ["should be doing the homework now", `To be doing the homework now`], + // ["would have been upset if you didn't show up", `To have been upset if you didn't show up`], + // ["has been trying to quit smoking", `To have been trying to quit smoking`], + // ["can't wait to see the new movie", `To not be able to wait to see the new movie`], + // ["were hoping for a positive outcome", `To have hoped for a positive outcome`], + // ["could have told me the truth", `To have told me the truth`], + // ["wouldn't dare to break the rules", `To not dare to break the rules`], + // ["is looking forward to the trip", `To be looking forward to the trip`], + // ["should be resting after the surgery", `To be resting after the surgery`], + // ["might be studying for the exam", `To be studying for the exam`], + // ["have been meaning to call you", `To have been meaning to call you`], + // ["was wondering about the results", `To have wondered about the results`], + ] + arr.forEach(a => { + const doc = nlp(a[0]) + doc.verbs().toInfinitive() + t.equal(doc.text(), a[1], here + ' ' + a[0]) + }) + t.end() +}) + +test('toInfinitive-coerced:', function (t) { + const arr = [ + ['smoked', 'smoke'], + ['detailed', 'detail'], + ['tailored', 'tailor'], + ['controlled', 'control'], + ['recorded', 'record'], + ['trapped', 'trap'], + ['associated', 'associate'], + ['stunned', 'stun'], + ] + arr.forEach(a => { + const doc = nlp(a[0]).tag('PastTense') + doc.verbs().toInfinitive() + t.equal(doc.text(), a[1], here + ' ' + a[0]) + }) + t.end() +})