How to filter Named Entity Recognition results I have a pipeline built which at the end outputs a bunch (thousands to tens of thousands or more) of named entities. I'd like to do aggregates on those named entities (to see, e.g. how many times a specific named entity is mentioned in my corpus). A problem that I am arriving at; however, is that the named entities often don't match up with each other even though they are the same entity. For example, one instance of the named entity might be "Dr. John Smith" while another instance is "John Smith" or one instance might be "Google" while another might be "Google Inc.". This makes aggregating quite hard to do.

In order to deal with this issue and set "Dr. John Smith" to be the same entity as "John Smith", I was thinking of doing word matching between my named entities. I.e. I would check if named entity A has a word in common with named entity B and if they do set them to be the same entity. This approach is obviously seriously flawed. I will be equating "John Nguyen" and "John Smith" as the same entity even though they are obviously not. What's potentially even worse with this method though is I might run into similarity chains where I have "John Smith" linked with "Richard Smith" linked with "Richard Sporting Goods Inc." linked with "Google Inc." etc etc... While I may be willing to allow issues arising from former problem through, the latter problem appears to be catastrophic.

Are there any accepted techniques in the NLP community for dealing with this issue?
The most advanced (and complicated) approach to this is some sort of weakly-supervised system like Holoclean. It seems promising, but not easy.

The other end of the spectrum are heuristics like the one you propose. If you want to use a string distance approach like you describe, I would create some metric that gives points for both string edit distance and having matching words. If you can break the pipeline into smaller steps, maybe you can use some sort of topic analysis, then look for two similar entities and that topic in a knowledge graph, and see if the point to the same area.

The 2018 Alexa Prize winner paper, Gunrock is full of clever heuristics that you might be able appropriate.

Edit: you should also look at Entity Linking, which is more or less the problem you describe.