Semantically matching camelcase or underscore separated words - nlp

I need to merge two ontologies together to a single file based on semantic similarity of concepts. For doing this, I use nlp for determining similar concepts semantically. There are cases that ontology concepts are named in camelcase or underscores to separated way. Are there any algorithms to semantically match camelcase or underscore separated words? What I need is semantically match two concepts which are named in camelcase of underscore separated way. This image has an ontology that contain concepts with camelcase namings. If there are no algorithms, please could you suggest a way?
I already found some algorithms for matching two words or sentences semantically (SEMILAR Library, cortical.io, Similarity Library and of course, WordNet). But none of them can match two camelcase or underscore separated words semantically. I know we can try by separating the words of the camelcase. But I have no clue what to do next. I am also new to nlp and I don't know if there a simple way to achieve this.
I expect an algorithm or a way that matches two camelcase or underscore separated words semantically and outputting a similarity score to determine the semantic similarity of them.
Update:
I also found this WS4J demo for measuring semantic similarity between words and sentences. But still cannot use it for camelcase and underscore separated words.

Related

Efficient implementation of BPE using priority queue

I think that it is not strictly BPE (byte pair encoding), but there is a similar idea applied to strings.
Suppose there are three Chinese words in the dictionary (I will use a huge dictionary like CEDICT for practical use.)
我
喜欢
水果
Then take an input like this below.
我喜欢水果 (I like fruit)
Since Chinese texts are not splitted by white spaces, it's difficult to process.
We can decompose the input string into multiple single characters.
我 喜 欢 水 果
Then lookup new symbol pair at [left, right] and combine them. If the combined word is in the dictionary, we can replace the combined word with a new symbol.
我喜
喜欢 <- in the dic
欢水
水果 <- in the dic
We found two new symbols, so the input text becomes
我 喜欢 水果
We should iterate until we cannot find any combined word in the dictionary. In this case, we cannot find a new symbol in the dictionary.
我喜欢 水果
喜欢水果
It's not difficult to implement this naively but we need to scan adjoining two words many times. Some said we can implement BPE efficiently with a priority queue. I'm not familiar with compression algorithms. I would be grateful if someone could tell me the implementation or useful documentations.
In this method, out of vocabulary words are decomposed into single characters, so we can avoid unknown words problems.
Best regards,
Reference: Neural Machine Translation of Rare Words with Subword Units He had to start with pre-tokenized words because of computational complexity.
I would suggest storing the dictionary as a trie using hash lookups at each level. This replaces your scans with hash lookups, which are O(1).

Differences between lexical features and orthographic features in NLP?

Features are used for model training and testing. What are the differences between lexical features and orthographic features in Natural Language Processing? Examples preferred.
I am not aware of such a distinction, and most of the time when people talk about lexical features they talk about using the word itself, in contrast to only using other features, ie its part-of-speech.
Here is an example of a paper that means "whole word orthograph" when they say lexical features
One could venture that orthographic could mean something more abstract than the sequence of characters themselves, for example whether the sequence is capitalized / titlecased / camelcased / etc. But we already have the useful and clearly understood shape feature denomination for that.
As such, I would recommend distinguishing features like this:
lexical features:
whole word, prefix/suffix (various lengths possible), stemmed word, lemmatized word
shape features:
uppercase, titlecase, camelcase, lowercase
grammatical and syntactic features:
POS, part of a noun-phrase, head of a verb phrase, complement of a prepositional phrase, etc...
This is not an exhaustive list of possible features and feature categories, but it might help you categorizing linguistic features in a clearer and more widely-accepted way.

clustering semantically related words from a list of words

I have a word list containing about 30000 unique words.
I would like to group this list of words based on how similar these words tend to be.
Can I create a ontology tree using this list and with possibly with the help of WordNet?
So essentially what I want to do is aggregate these words in some meaningful way to reduce the size of the list. What kind of techniques can I use to do this?
You could certainly use Wordnet to make a first step towards clustering these words according to their SYNSET. In addition to 'same meaning' and 'opposite meaning' Wordnet also includes 'part of' relationships. Following these relationships for the word 'beer' for example visits all of these containing synsets: Brew1, Alcohol1, Drug_of_abuse1, Drug1, Agent3, Substance7, Matter3, Physical_entity1, Entity1, Causal_agent1, Beverage1, Liquid1, Fluid1, Substance1, Part1, Relation1, Abstraction6, Food1.
But ... it will depend on what kind of words you have as to how many you will find in Wordnet. It doesn't include verb tenses and it doesn't have a very large or very modern set of proper nouns. If you 30,000 words are adjectives and nouns it should do quite well.

Finding mnemonic sentences and acrostics

There are many websites with which one can carry out searches to return results with specific constraints from a dictionary with the purpose of solving word puzzles.
But is there a way to search a specific text document, other than a dictionary, so that one can locate meaningful mnemonic sentences from the text of one's choice?
For example, if I want to find a sentence to help me remember the order of a list of letters, M, I, S, S, C, G, which are the first letters of a list of words I need to remember: Muscular, Infrahyoid, Superior laryngeal, Sternomastoid, Cricothyroid, Glandular, how can I search a text document (or multiple documents) for sentences in which these letters appear as the first letters in the words of that sentence?, in a specified order?
This would allow me to memorize sentences from the text of my choice, which are meaningful and useful, and simultaneously memorize the order of the letters which I need to recall the list of vocabulary words.
Sure, I can generate a mnemonic of random, meaningless words, which would serve the purpose of memory recall just fine. I might end up with a funny sentence like: "May I Softly Squeeze Charlie's Girl?" to help me remember the above list of words. However, I would much prefer to find mnemonic sentences from a text of my choice which are personally meaningful to me.
Any suggestions you might have would be greatly appreciated.

What is the difference between lemmatization vs stemming?

When do I use each ?
Also...is the NLTK lemmatization dependent upon Parts of Speech?
Wouldn't it be more accurate if it was?
Short and dense: http://nlp.stanford.edu/IR-book/html/htmledition/stemming-and-lemmatization-1.html
The goal of both stemming and lemmatization is to reduce inflectional forms and sometimes derivationally related forms of a word to a common base form.
However, the two words differ in their flavor. Stemming usually refers to a crude heuristic process that chops off the ends of words in the hope of achieving this goal correctly most of the time, and often includes the removal of derivational affixes. Lemmatization usually refers to doing things properly with the use of a vocabulary and morphological analysis of words, normally aiming to remove inflectional endings only and to return the base or dictionary form of a word, which is known as the lemma .
From the NLTK docs:
Lemmatization and stemming are special cases of normalization. They identify a canonical representative for a set of related word forms.
Lemmatisation is closely related to stemming. The difference is that a
stemmer operates on a single word without knowledge of the context,
and therefore cannot discriminate between words which have different
meanings depending on part of speech. However, stemmers are typically
easier to implement and run faster, and the reduced accuracy may not
matter for some applications.
For instance:
The word "better" has "good" as its lemma. This link is missed by
stemming, as it requires a dictionary look-up.
The word "walk" is the base form for word "walking", and hence this
is matched in both stemming and lemmatisation.
The word "meeting" can be either the base form of a noun or a form
of a verb ("to meet") depending on the context, e.g., "in our last
meeting" or "We are meeting again tomorrow". Unlike stemming,
lemmatisation can in principle select the appropriate lemma
depending on the context.
Source: https://en.wikipedia.org/wiki/Lemmatisation
Stemming just removes or stems the last few characters of a word, often leading to incorrect meanings and spelling. Lemmatization considers the context and converts the word to its meaningful base form, which is called Lemma. Sometimes, the same word can have multiple different Lemmas. We should identify the Part of Speech (POS) tag for the word in that specific context. Here are the examples to illustrate all the differences and use cases:
If you lemmatize the word 'Caring', it would return 'Care'. If you stem, it would return 'Car' and this is erroneous.
If you lemmatize the word 'Stripes' in verb context, it would return 'Strip'. If you lemmatize it in noun context, it would return 'Stripe'. If you just stem it, it would just return 'Strip'.
You would get same results whether you lemmatize or stem words such as walking, running, swimming... to walk, run, swim etc.
Lemmatization is computationally expensive since it involves look-up tables and what not. If you have large dataset and performance is an issue, go with Stemming. Remember you can also add your own rules to Stemming. If accuracy is paramount and dataset isn't humongous, go with Lemmatization.
There are two aspects to show their differences:
A stemmer will return the stem of a word, which needn't be identical to the morphological root of the word. It usually sufficient that related words map to the same stem,even if the stem is not in itself a valid root, while in lemmatisation, it will return the dictionary form of a word, which must be a valid word.
In lemmatisation, the part of speech of a word should be first determined and the normalisation rules will be different for different part of speech, while the stemmer operates on a single word without knowledge of the context, and therefore cannot discriminate between words which have different meanings depending on part of speech.
Reference http://textminingonline.com/dive-into-nltk-part-iv-stemming-and-lemmatization
The purpose of both stemming and lemmatization is to reduce morphological variation. This is in contrast to the the more general "term conflation" procedures, which may also address lexico-semantic, syntactic, or orthographic variations.
The real difference between stemming and lemmatization is threefold:
Stemming reduces word-forms to (pseudo)stems, whereas lemmatization reduces the word-forms to linguistically valid lemmas. This difference is apparent in languages with more complex morphology, but may be irrelevant for many IR applications;
Lemmatization deals only with inflectional variance, whereas stemming may also deal with derivational variance;
In terms of implementation, lemmatization is usually more sophisticated (especially for morphologically complex languages) and usually requires some sort of lexica. Satisfatory stemming, on the other hand, can be achieved with rather simple rule-based approaches.
Lemmatization may also be backed up by a part-of-speech tagger in order to disambiguate homonyms.
As MYYN pointed out, stemming is the process of removing inflectional and sometimes derivational affixes to a base form that all of the original words are probably related to. Lemmatization is concerned with obtaining the single word that allows you to group together a bunch of inflected forms. This is harder than stemming because it requires taking the context into account (and thus the meaning of the word), while stemming ignores context.
As for when you would use one or the other, it's a matter of how much your application depends on getting the meaning of a word in context correct. If you're doing machine translation, you probably want lemmatization to avoid mistranslating a word. If you're doing information retrieval over a billion documents with 99% of your queries ranging from 1-3 words, you can settle for stemming.
As for NLTK, the WordNetLemmatizer does use the part of speech, though you have to provide it (otherwise it defaults to nouns). Passing it "dove" and "v" yields "dive" while "dove" and "n" yields "dove".
An example-driven explanation on the differenes between lemmatization and stemming:
Lemmatization handles matching “car” to “cars” along
with matching “car” to “automobile”.
Stemming handles matching “car” to “cars” .
Lemmatization implies a broader scope of fuzzy word matching that is
still handled by the same subsystems. It implies certain techniques
for low level processing within the engine, and may also reflect an
engineering preference for terminology.
[...] Taking FAST as an example,
their lemmatization engine handles not only basic word variations like
singular vs. plural, but also thesaurus operators like having “hot”
match “warm”.
This is not to say that other engines don’t handle synonyms, of course
they do, but the low level implementation may be in a different
subsystem than those that handle base stemming.
http://www.ideaeng.com/stemming-lemmatization-0601
Stemming is the process of removing the last few characters of a given word, to obtain a shorter form, even if that form doesn't have any meaning.
Examples,
"beautiful" -> "beauti"
"corpora" -> "corpora"
Stemming can be done very quickly.
Lemmatization on the other hand, is the process of converting the given word into it's base form according to the dictionary meaning of the word.
Examples,
"beautiful" -> "beauty"
"corpora" -> "corpus"
Lemmatization takes more time than stemming.
I think Stemming is a rough hack people use to get all the different forms of the same word down to a base form which need not be a legit word on its own
Something like the Porter Stemmer can uses simple regexes to eliminate common word suffixes
Lemmatization brings a word down to its actual base form which, in the case of irregular verbs, might look nothing like the input word
Something like Morpha which uses FSTs to bring nouns and verbs to their base form
Huang et al. describes the Stemming and Lemmatization as the following. The selection depends upon the problem and computational resource availability.
Stemming identifies the common root form of a word by removing or replacing word suffixes (e.g. “flooding” is stemmed as “flood”), while lemmatization identifies the inflected forms of a word and returns its base form (e.g. “better” is lemmatized as “good”).
Huang, X., Li, Z., Wang, C., & Ning, H. (2020). Identifying disaster related social media for rapid response: a visual-textual fused CNN architecture. International Journal of Digital Earth, 13(9), 1017–1039. https://doi.org/10.1080/17538947.2019.1633425
Stemming and Lemmatization both generate the foundation sort of the inflected words and therefore the only difference is that stem may not be an actual word whereas, lemma is an actual language word.
Stemming follows an algorithm with steps to perform on the words which makes it faster. Whereas, in lemmatization, you used a corpus also to supply lemma which makes it slower than stemming. you furthermore might had to define a parts-of-speech to get the proper lemma.
The above points show that if speed is concentrated then stemming should be used since lemmatizers scan a corpus which consumes time and processing. It depends on the problem you’re working on that decides if stemmers should be used or lemmatizers.
for more info visit the link:
https://towardsdatascience.com/stemming-vs-lemmatization-2daddabcb221
Stemming
is the process of producing morphological variants of a root/base word. Stemming programs are commonly referred to as stemming algorithms or stemmers.
Often when searching text for a certain keyword, it helps if the search returns variations of the word.
For instance, searching for “boat” might also return “boats” and “boating”. Here, “boat” would be the stem for [boat, boater, boating, boats].
Lemmatization
looks beyond word reduction and considers a language’s full vocabulary to apply a morphological analysis to words. The lemma of ‘was’ is ‘be’ and the lemma of ‘mice’ is ‘mouse’.
I did refer this link,
https://towardsdatascience.com/stemming-vs-lemmatization-2daddabcb221
In short, the difference between these algorithms is that only lemmatization includes the meaning of the word in the evaluation. In stemming, only a certain number of letters are cut off from the end of the word to obtain a word stem. The meaning of the word does not play a role in it.
In short:
Lemmatization: uses context to transform words to their
dictionary(base) form also known as Lemma
Stemming: uses the stem of the word, most of the time removing derivational affixes.
source

Resources