Parsing 如何使用PHP或JavaScript从字符串中提取专有名词?

Parsing 如何使用PHP或JavaScript从字符串中提取专有名词?,parsing,Parsing,如何使用PHP或JavaScript从字符串中提取专有名词/数值? 例如,有一个字符串 Xyz在本页53分钟前访问了本页 我希望能够将“Xyz”和“53”分别识别为专有名词和数字一个明显的方法是拥有专有知识词典和一些好的索引,以便在存在此类知识的情况下快速搜索 但我感觉你在寻找一种从语法上推断一个词是专有名词的方法 我想不出任何完美的方法来做到这一点,但如果你创建了一系列规则,你可以使用这些规则来解析一篇文章 规则可能包括。 *以ly结尾的词不是专有名词 *和、to、but等噪音词不是专有名词

如何使用PHP或JavaScript从字符串中提取专有名词/数值? 例如,有一个字符串

Xyz在本页53分钟前访问了本页


我希望能够将“Xyz”和“53”分别识别为专有名词和数字

一个明显的方法是拥有专有知识词典和一些好的索引,以便在存在此类知识的情况下快速搜索

但我感觉你在寻找一种从语法上推断一个词是专有名词的方法

我想不出任何完美的方法来做到这一点,但如果你创建了一系列规则,你可以使用这些规则来解析一篇文章

规则可能包括。 *以ly结尾的词不是专有名词 *和、to、but等噪音词不是专有名词 *有大写字母但不开句的单词是专有名词

为了改进它,您可以使用这些规则创建专有名词词典。每当一个单词遵循这些规则中的一条时,它要么被添加到专有名词词典中,要么被从专有名词词典中删除


这是非常粗糙的-如果这是在正确的轨道上,那么perhas I可以更具体。

一个明显的方法是有一个适当的知识字典和一些好的索引,以便快速搜索,如果存在这样的东西

但我感觉你在寻找一种从语法上推断一个词是专有名词的方法

我想不出任何完美的方法来做到这一点,但如果你创建了一系列规则,你可以使用这些规则来解析一篇文章

规则可能包括。 *以ly结尾的词不是专有名词 *和、to、but等噪音词不是专有名词 *有大写字母但不开句的单词是专有名词

为了改进它,您可以使用这些规则创建专有名词词典。每当一个单词遵循这些规则中的一条时,它要么被添加到专有名词词典中,要么被从专有名词词典中删除


这很粗糙-如果这是在正确的轨道上,那么perhas I可以更具体。

如果它在句子中总是一个专有名词,那么你可以通过查找以大写字母开头的单词来找到它。如果除了第一个词没有其他词,那么它就是。若Xyz被命名为Bim de Verdier,或者并没有实际大写,那个么问题就会出现

// Get the number with JavaScript and RegExp
var regex = new RegExp("\d+");
var match = regex.exec("Xyz visisted this page this page 53 mins ago.");
if (match == null) {
  alert("No match");
} else {
  var s = "";
  for (i = 0; i < match.length; i++) {
    s = s + match[i] + "\n";
  }
  alert(s);
}
//使用JavaScript和RegExp获取数字
var regex=new RegExp(“\d+”);
var match=regex.exec(“Xyz在53分钟前访问了此页面。”);
if(match==null){
警惕(“不匹配”);
}否则{
var s=“”;
对于(i=0;i

大写的单词可以与“[A-Z][A-Z]+[]”匹配

如果它在句子中总是一个专有名词,那么你可以通过查找以大写字母开头的单词来找到它。如果除了第一个词没有其他词,那么它就是。若Xyz被命名为Bim de Verdier,或者并没有实际大写,那个么问题就会出现

// Get the number with JavaScript and RegExp
var regex = new RegExp("\d+");
var match = regex.exec("Xyz visisted this page this page 53 mins ago.");
if (match == null) {
  alert("No match");
} else {
  var s = "";
  for (i = 0; i < match.length; i++) {
    s = s + match[i] + "\n";
  }
  alert(s);
}
//使用JavaScript和RegExp获取数字
var regex=new RegExp(“\d+”);
var match=regex.exec(“Xyz在53分钟前访问了此页面。”);
if(match==null){
警惕(“不匹配”);
}否则{
var s=“”;
对于(i=0;i

大写单词可以与“[A-Z][A-Z]+[]”匹配

PHP函数
是数字的
ucfirst
可以帮助识别单词:

function parse_name_and_number($sentence) {
    $words = explode(' ', $sentence);
    $name = array();
    foreach ($words as $word) {
        if (is_numeric($word))
            $number = $word;
        elseif ($word == ucfirst($word))
            $name[] = $word;
    }
    $name = implode(' ', $name);
    return array('name' => $name, 'number' => $number);
}

print_r(parse_name_and_number('Xyz visited this page 53 minutes ago'));
// output:  Array ( [name] => Xyz [number] => 53 )

print_r(parse_name_and_number('we thought Bim de Verdier visited the page 5 seconds ago'));
// output:  Array ( [name] => Bim Verdier [number] => 5 )

print_r(parse_name_and_number('Weirder input messes up the results'));
// output:  Array ( [name] => Weirder [number] => )

PHP函数
是数字的
ucfirst
可以帮助识别单词:

function parse_name_and_number($sentence) {
    $words = explode(' ', $sentence);
    $name = array();
    foreach ($words as $word) {
        if (is_numeric($word))
            $number = $word;
        elseif ($word == ucfirst($word))
            $name[] = $word;
    }
    $name = implode(' ', $name);
    return array('name' => $name, 'number' => $number);
}

print_r(parse_name_and_number('Xyz visited this page 53 minutes ago'));
// output:  Array ( [name] => Xyz [number] => 53 )

print_r(parse_name_and_number('we thought Bim de Verdier visited the page 5 seconds ago'));
// output:  Array ( [name] => Bim Verdier [number] => 5 )

print_r(parse_name_and_number('Weirder input messes up the results'));
// output:  Array ( [name] => Weirder [number] => )

最好的选择是使用链接语法。分析句子并提取专有名词


www.link.cs.cmu.edu/link

最好的选择是使用链接语法。分析句子并提取专有名词

Xyz visisted this page this page 53 mins ago.
www.link.cs.cmu.edu/link

Xyz visisted this page this page 53 mins ago.
现在,只要得到“Visited this page”或其他什么的位置,这就是你从句子开始的长度。例如,如果“Person”总是在开头,那么只需将起点设置为7,并从第一个数字中减去7即可。下面是一个简单的JS示例:

alert(str.substr(7, str.IndexOf("visited") - 7));
它应该返回“Xyz”。希望有帮助。当然,这只有在你知道你的句子结构的情况下才能起作用,这就是例子中的情况

另外,我知道我晚了两年,但这可能对将来的人有所帮助

现在,只要得到“Visited this page”或其他什么的位置,这就是你从句子开始的长度。例如,如果“Person”总是在开头,那么只需将起点设置为7,并从第一个数字中减去7即可。下面是一个简单的JS示例:

alert(str.substr(7, str.IndexOf("visited") - 7));
它应该返回“Xyz”。希望有帮助。当然,这只有在你知道你的句子结构的情况下才能起作用,这就是例子中的情况


另外,我知道我迟到了两年,但这可能会对将来的人有所帮助。

要做到这一点并不容易。你必须研究“自然语言处理/识别”的广泛领域,没有简单的方法可以做到这一点。您必须研究“自然语言处理/识别”的广泛领域,我希望通过正则表达式或soemthing实现这一点,例如/([^.])(\s)+([A-Z]{1}[A-Z]+)/但是这个正则表达式与两个相同的专有名词不匹配……例如“name is Abb Bayer”…没有简单的方法来实现这一点…我没有解决这个问题…但仍在思考。我承认要做到这一点需要做很多工作。我希望通过正则表达式或soemthing来实现这一点,例如/([^.])(\s)+([a-Z]{1}[a-Z]+)/但是这个正则表达式与两个相同的专有名词不匹配…例如“name is Abb Bayer”…实现这一点没有简单的方法..我没有解决这个问题..但仍在思考.我承认要做到这一点需要付出很多努力