代码之家  ›  专栏  ›  技术社区  ›  AbtPst

如何为StanfordNER清理句子

  •  0
  • AbtPst  · 技术社区  · 9 年前

    我想使用 StanfordNER 在python中检测命名实体。我应该如何清理句子?

    例如,考虑

    qry="In the UK, the class is relatively crowded with Zacc competing with Abc's Popol (market leader) and Xyz's Abcvd."

    如果我这样做

    st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz') 
    print st.tag(qry.split())
    

    我明白了

    [
        (u'In', u'O'), (u'the', u'O'), (u'UK,', u'O'), (u'the', u'O'), 
        (u'class', u'O'), (u'is', u'O'), (u'relatively', u'O'), (u'crowded', u'O'), 
        (u'with', u'O'), (u'Zacc', u'PERSON'), (u'competing', u'O'), (u'with', u'O'), 
        (u"Abc's", u'O'), (u'Popol', u'O'), (u'(market', u'O'), (u'leader)', u'O'), 
        (u'and', u'O'), (u"Xyz's", u'O'), (u'Abcvd.', u'O')
    ]
    

    `

    因此仅检测到1个命名实体。但是,如果我用空格替换所有特殊字符来进行清理

    qry="In the UK the class is relatively crowded with Zacc competing with Abc s Popol market leader and Xyz s Abcvd"

    我明白了

    [
        (u'In', u'O'), (u'the', u'O'), (u'UK', u'LOCATION'), (u'the', u'O'), 
        (u'class', u'O'), (u'is', u'O'), (u'relatively', u'O'), (u'crowded', u'O'), 
        (u'with', u'O'), (u'Zacc', u'PERSON'), (u'competing', u'O'), (u'with', u'O'), 
        (u'Abc', u'ORGANIZATION'), (u's', u'O'), (u'Popol', u'PERSON'), (u'market', u'O'), 
        (u'leader', u'O'), (u'and', u'O'), (u'Xyz', u'ORGANIZATION'), (u's', u'O'), (u'Abcvd', u'PERSON')]
    

    `

    很明显,这更合适。有没有关于如何清理句子的一般规则 StanfordNER公司 ? 最初我认为根本不需要清理!

    3 回复  |  直到 8 年前
        1
  •  4
  •   Rohan Amrute    9 年前

    你可以根据自己的目的使用斯坦福代币器。 你可以使用下面的代码。

    from nltk.tokenize.stanford import StanfordTokenizer
    token = StanfordTokenizer('stanford-ner-2014-06-16/stanford-ner.jar')
    qry="In the UK, the class is relatively crowded with Zacc competing with Abc's Popol (market leader) and  Xyz's Abcvd."
    tok = token.tokenize(qry)
    print tok
    

    您将根据需要获得代币。

    [u'In',
    u'这',
    u'英国',
    u',',
    u'这',
    u'类',
    u'is',
    你“相对地”,
    “拥挤”,
    u'与',
    u'Zacc',
    u“完成”,
    u'与',
    u'Abc',
    u“的”,
    u'Popol',
    u’-LRB-’,
    “市场”,
    u'领导',
    u’-RRB-’,
    u'和',
    u'Xyz',
    u“的”,
    u'Abcvd',
    u'.']

        2
  •  2
  •   Gabor Angeli    9 年前

    您应该确保您对句子进行了标记化——这是第一次调用(您隐式地用 qry.split() )第二种是手动标记(例如posessive 's 作为其自己的令牌)。斯坦福大学 does have a tokenizer ,这是NER系统所训练的标记化器,尽管我不是如何从Python调用它的专家。简单地不拆分句子是否为你标记了它?

        3
  •  1
  •   alvas    9 年前

    请在处理文本之前对其进行单词标记。另外,请注意,大多数注释系统都是从句子中训练出来的,所以您可以在单词标记化之前进行句子标记化。

    alvas@ubi:~$ export STANFORDTOOLSDIR=$HOME
    alvas@ubi:~$ export CLASSPATH=$STANFORDTOOLSDIR/stanford-ner-2015-12-09/stanford-ner.jar
    alvas@ubi:~$ export STANFORD_MODELS=$STANFORDTOOLSDIR/stanford-ner-2015-12-09/classifiers
    alvas@ubi:~$ python
    Python 2.7.11 (default, Dec 15 2015, 16:46:19) 
    [GCC 4.8.4] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from nltk import word_tokenize
    >>> from nltk.tag import StanfordNERTagger
    >>> from nltk.internals import find_jars_within_path
    >>> st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz')
    >>> stanford_dir = st._stanford_jar.rpartition('/')[0]
    >>> stanford_jars = find_jars_within_path(stanford_dir)
    >>> st._stanford_jar = ':'.join(stanford_jars)
    >>> 
    >>> text = "In the UK, the class is relatively crowded with Zacc competing with Abc's Popol (market leader) and  Xyz's Abcvd."
    >>> text = word_tokenize(text)
    >>> text
    ['In', 'the', 'UK', ',', 'the', 'class', 'is', 'relatively', 'crowded', 'with', 'Zacc', 'competing', 'with', 'Abc', "'s", 'Popol', '(', 'market', 'leader', ')', 'and', 'Xyz', "'s", 'Abcvd', '.']
    >>> st.tag(text)
    [(u'In', u'O'), (u'the', u'O'), (u'UK', u'LOCATION'), (u',', u'O'), (u'the', u'O'), (u'class', u'O'), (u'is', u'O'), (u'relatively', u'O'), (u'crowded', u'O'), (u'with', u'O'), (u'Zacc', u'PERSON'), (u'competing', u'O'), (u'with', u'O'), (u'Abc', u'PERSON'), (u"'s", u'O'), (u'Popol', u'O'), (u'(', u'O'), (u'market', u'O'), (u'leader', u'O'), (u')', u'O'), (u'and', u'O'), (u'Xyz', u'ORGANIZATION'), (u"'s", u'O'), (u'Abcvd', u'O'), (u'.', u'O')]