2015-10-16 55 views
0

我想知道我们是否可以使用文本文件作为标记化的手段。例如,假设有一个文件(字典),并且你想标记你检查第一个字典来标记。你可以使用字典(文本)正则表达式标记化吗?

如:

Dict_list = [环境测试中,苹果猫,其余测试]

文本:环境试验是世界苹果猫最好的苹果是在测试休息。

假设文本列表很大,字典也很大,所以如果我们想标记它会标记空格,但是我需要标记整个文本但是我想检查dict_list看看它是否应该是一个标记。

所以令牌应该是:

令牌道: “”, “环境试验”, “是”, “的”, “最好的苹果”, “中”, “中”, “世界”, “苹果猫”,“是”,“该”,“测试休息”。

我希望这是有道理的。

预先感谢您。

+0

不,这没有意义。你有一些代码,预期的结果和实际结果吗?或者这是一个哲学问题。 – RobertB

+0

@Sam这是你的解决方案:http://www.nltk.org/api/nltk.tokenize.html – mertyildiran

+0

@RobertB,我有一个文本文件,我需要标记。我们不能使用普通的正则表达式/标记器来标记文档,所以我需要一种标记这些文本的方法。如果我能结合正则表达式和字典,我相信会更容易。我的问题是,如果这是可能的。 – Sam

回答

1

这是一种方式,但一种替代方法:

Python3版本:

from nltk.tokenize import regexp_tokenize 

sent = "I like apple fruit but grape fruit more" 
dict_list = ["apple fruit", "grape fruit"] 
newdict = {} 
for item in dict_list: 
    dk = item.replace(" ", "_") 
    newdict[item] = dk 

for key, val in newdict.items(): 
    if key in sent: 
     sent = sent.replace(key, val) 

res = regexp_tokenize(sent, pattern='\S+') 
print(res) 

输出:

[ 'I', '象', 'apple_fruit' ,'but','grape_fruit','more']

如果您愿意,您可以用空格替换所有下划线。

+0

嗨Kmario,我看到你正在使用字典,我可以用列表做同样的事情吗?而不是字典:我需要列表:除此之外,这是我正在寻找。 – Sam

+0

嗨山姆!当然,你可以使用字典,因为查找的运行时间复杂度是O(1)。 – kmario23

+0

感谢您的快速回复。我需要使用这个列表,因为我所说的“字典”是列表格式。当我说字典时,我想用它作为普通字典来查看它以正确标记 – Sam

1

随着nltk.tokenize包,你可以很容易地做到这一点。例如:

>>> tokenizer.tokenize('Testing testing testing one two three'.split()) 
['Testing', 'testing', 'testing', 'one', 'two', 'three'] 

>>> tokenizer = MWETokenizer([('hors', "d'oeuvre")], separator='+') 
>>> tokenizer.tokenize("An hors d'oeuvre tonight, sir?".split()) 
['An', "hors+d'oeuvre", 'tonight,', 'sir?'] 
+0

这与我所寻找的有点不同。注意我不需要+,也想知道我们是否可以在字典中使用其他正则表达式。是否有可能结合正则表达式和字典? – Sam

+0

我认为这是一个很好的解决方案。 '+'在令牌中,而不在源中。如果你不喜欢它,那么改变它或者把它拿出来。 – RobertB

+0

@mertyiliran,我试图使用多词表达式标记器。但是,当我使用从nltk.tokenize导入MWETokenizer。我收到错误ImportError:无法导入名称'MWETokenizer'。你知道是什么导致这个错误。我正在使用python 3.4 – Sam

相关问题