如何解决Nltk Tokenizing 并通过保留句子添加 Bigrams
我正在写我的学士论文,必须准备一个语料库来训练词嵌入。 我在想的是是否可以检查 ngram 的标记化句子或文本,然后将这些单个标记与 ngram 交换。
为了更清楚我的意思:
输入
var = ['Hello','Sherlock','Holmes','my','name','is','Mr','.','Watson','.']
期望输出
var = ['Hello','Sherlock_Holmes','Mr_Watson','.']
我知道沃森先生现在并不是一个完美的例子。但我在考虑这是否可能。
因为在不寻找 ngram 的情况下训练我的 word2vec 算法并不能很好地完成这项工作。
class MySentence():
def __init__(self,dirname):
self.dirname = dirname
print('Hello init')
def __iter__(self):
for fname in os.listdir(self.dirname):
txt = []
for line in open(os.path.join(self.dirname,fname)):
txt = nltk.regexp_tokenize(line,pattern='\w+|\$[\d\.]+|\S+')
tokens = [token for token in tokens if len(token) > 1] #same as unigrams
bi_tokens = bigrams(tokens)
yield tri_tokens = trigrams(tokens)
sentences = MySentence(path)
解决方法
N-gram 只是相邻单词的序列,但它们不必在语言上有意义。例如,“Hello Sherlock”和“Holmes my”可能是 2 克。相反,听起来您正在寻找具有特定语言上下文或实体识别(“Sherlock Holmes”)的更复杂的标记化,这本身需要经过训练的模型。查看 NLTK 关于 documentation 或 nltk.ne_chunk()
的 rule-based chunking。或者对于开箱即用的解决方案,spaCy 的命名实体识别和标记化功能可以开始使用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。