How can I determine if a noun is the name of a person based on other words in the sentence?

For example, I was able to determine that a noun is a place by it following ' to ' or ' from '.

Are there words that nouns, which are people's names, tend to follow in English sentences?

If not, or there are too many words, how can I determine if a noun is a person's name without looking a and comparing to a list of names?

  • Talk to any Computational Linguist; you'll get more details from them.
    – jlawler
    Jun 22, 2014 at 21:55
  • @jlawler What do you mean? This is the right place to ask.
    – Alenanno
    Jun 22, 2014 at 22:23
  • @Alenanno: I mean that names denoting people can occur after from and to; they are not limited to place names. So there's a false presupposition already, and we haven't got to the questions based on it.
    – jlawler
    Jun 22, 2014 at 23:36
  • Your question is not quite clear to me... are you asking about Named-entity recognition? If so there are several methods of accomplishing it, and most that work well use statistical techniques.
    – prash
    Jun 23, 2014 at 4:28
  • In English, which is what you’re interested in I suppose, the sequence possessive pronoun – function/relation – name isn’t that rare, e.g. my cousin Jane or your colleague Joe, but also without pronoun, e.g. the new CEO Jill and King James. Uppercase first letters are also a sure sign, as are honorifics like Mr. or President.
    – Crissov
    Jun 23, 2014 at 7:26

1 Answer 1


Actually it will not help much, but there is a model called Hidden Markov Model which is simply based on statistics and probabilistics. You can get more information by a probabilistic computational linguistics book.

I am not very good at mathematics and HMM is much more empiric rather than rational. The only thing I know about HMM is (very very basic):

  1. Working on a corpus. (A bunch of text, I mean.)
  2. Tokenizing every single sentence. (Take care of yourself. == take, care, of, yourself)
  3. Taking the statistic of corpus. (take: 34, care: 27, yellow: 13, blah blah...)
  4. Taking the statistic of every single token's sequel. (The statistic of "What do 'take' take at the before or (generally) next of token?". ^^ take: care(13), this(11), my(7) || care: of(7)...)

enter image description here

Coming to person names, there can be a way to determine it. Firstly, you take corpora which are simply based on literature (because they include so much names than other text types). Then you tokenize it, take the token and sequel statistic.

Now you have to know which tokens follow the person names. Let's look at those sentences:

  • My dear Watson told me that the thief had took the emerald away before we reached there.
  • My name is Sarah.
  • John is my very best friend.
  • Emily brought your book back.
  • David played the piano.

In those sentence, all person names took those places: (1) In verbial sentences, right before the verb; (2) in noun sentences, right after the copula; (3) in noun sentences, right before the copula.

In our very limited a bunch of sentences above, we will take the names which are the head of a noun phrase and right before the verb or copula, because they are the easiest ones to determine. In this step, you must use regular expressions. Firstly, you must find the tokens right before the copulas:

before("am||is||are||was||were"): book(156), chair(143) ... ... John(2) ... ...

Since the usage of person names is very low, you can easily determine them. Now you can determine right after the copulas:

after("am||is||are||was||were"): the(456), my(332) ... ... Sarah(4) ... ...

However, there is a probability that a special name can be the head of a phrase, this will not help that much. Coming to verbial sentences, for now, you can only determine past tense or perfect tense (!!) sentences:

before("+*ed||have +*ed||has +*ed||had +*ed"): I(455), you(352) ... ... David(5) ... ...

In those sentences, +* means every single characters which contains at least one character in it. Those will find -for instance- "played, leaked, climbed" etc. verbs which seem in an order on past suffixication.

Finally, you must use a programming language (Python is my best.), NLP library (NLTK in Python) and regular expressions (nearly every language contains). I know that will not help much, but if you work on big literature corporas, I think you will acquire more person names and you can even develop your own way to determine person names. Those steps are very very basic, so I recommend you to take a statistical computational linguistics book or talk to any computational linguist as jlawler says.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.