从Web域地址中提取名称实体

时间:2016-08-15 13:59:30

标签: python string machine-learning nlp

我正在研究一个NLP问题(在Python 2.7中),从报告中的文本中提取新闻报道的位置。对于此任务,我使用的Clavin API运行良好。

但是我注意到位置区域的名称经常在报告本身的URL中提到,我想找到一种从域名中提取此实体的方法,以提高准确度Clavin在请求中提供了一个额外的命名实体。

在一个理想的世界里,我希望能够提供这样的信息: www.britainnews.net

并返回此输出或类似输出: [www,britain,news,net]

当然我可以使用.split()功能来分隔不重要的wwwnet令牌,但是我很难过如何在没有强化字典查找的情况下拆分中间短语

我不是要求某人解决这个问题或为我编写任何代码 - 但这是一个公开征集关于理想NLP库(如果存在)的建议或关于如何解决这个问题的任何想法。

1 个答案:

答案 0 :(得分:0)

检查Word Segmentation Task来自Norvig的工作。

from __future__ import division
from collections import Counter
import re, nltk

WORDS = nltk.corpus.reuters.words()

COUNTS = Counter(WORDS)

def pdist(counter):
    "Make a probability distribution, given evidence from a Counter."
    N = sum(counter.values())
    return lambda x: counter[x]/N

P = pdist(COUNTS)

def Pwords(words):
    "Probability of words, assuming each word is independent of others."
    return product(P(w) for w in words)

def product(nums):
    "Multiply the numbers together.  (Like `sum`, but with multiplication.)"
    result = 1
    for x in nums:
        result *= x
    return result

def splits(text, start=0, L=20):
    "Return a list of all (first, rest) pairs; start <= len(first) <= L."
    return [(text[:i], text[i:]) 
            for i in range(start, min(len(text), L)+1)]

def segment(text):
    "Return a list of words that is the most probable segmentation of text."
    if not text: 
        return []
    else:
        candidates = ([first] + segment(rest) 
                      for (first, rest) in splits(text, 1))
        return max(candidates, key=Pwords)

print segment('britainnews')     # ['britain', 'news']

更多示例:Word Segmentation Task