如何将标记化中的多词名称放在一起?
How can I keep multi-word names in tokenization together?
我想使用 TF-IDF 特征对文档进行分类。一种方法:
from sklearn.feature_extraction.text import TfidfVectorizer
import string
import re
import nltk
def tokenize(document):
document = document.lower()
for punct_char in string.punctuation:
document = document.replace(punct_char, " ")
document = re.sub('\s+', ' ', document).strip()
tokens = document.split(" ")
# Contains more than I want:
# from spacy.lang.de.stop_words import STOP_WORDS
stopwords = nltk.corpus.stopwords.words('german')
tokens = [token for token in tokens if token not in stopwords]
return tokens
# How I intend to use it
transformer = TfidfVectorizer(tokenizer=tokenize)
example = "Jochen Schweizer ist eines der interessantesten Unternehmen der Welt, hat den Sitz allerdings nicht in der Schweizerischen Eidgenossenschaft."
transformer.fit([example])
# Example of the tokenizer
print(tokenize(example))
这个分词器的一个缺陷是它会拆分属于一起的单词:"Jochen Schweizer" 和 "schweizerische Eidgenossenschaft"。还缺少词形还原(词干提取)。我想获得以下代币:
["Jochen Schweizer", "interessantesten", "unternehmen", "Welt", "Sitz", "allerdings", "nicht", "Schweizerische Eidgenossenschaft"]
我知道 Spacy 可以识别那些命名实体(NER):
import en_core_web_sm # python -m spacy download en_core_web_sm --user
parser = en_core_web_sm.load()
doc = parser(example)
print(doc.ents) # (Jochen Schweizer, Welt, Sitz)
是否有使用 spacy 以将命名实体词保持在一起的方式进行标记化的好方法?
这个怎么样:
with doc.retokenize() as retokenizer:
for ent in doc.ents:
retokenizer.merge(doc[ent.start:ent.end])
事实上,您可以使用 spacy 去除标点符号和停用词,并进行词形还原!
parser = spacy.load('de_core_news_sm')
def tokenize(text):
doc = parser(text)
with doc.retokenize() as retokenizer:
for ent in doc.ents:
retokenizer.merge(doc[ent.start:ent.end], attrs={"LEMMA": ent.text})
return [x.lemma_ for x in doc if not x.is_punct and not x.is_stop]
示例:
>>> text = "Jochen Schweizer ist eines der interessantesten Unternehmen der Welt, hat den Sitz allerdings nicht in der Schweizerischen Eidgenossenschaft."
>>> print(tokenize(text))
>>> [u'Jochen Schweizer', u'interessant', u'Unternehmen', u'Welt', u'Sitz', u'Schweizerischen Eidgenossenschaft']
我想使用 TF-IDF 特征对文档进行分类。一种方法:
from sklearn.feature_extraction.text import TfidfVectorizer
import string
import re
import nltk
def tokenize(document):
document = document.lower()
for punct_char in string.punctuation:
document = document.replace(punct_char, " ")
document = re.sub('\s+', ' ', document).strip()
tokens = document.split(" ")
# Contains more than I want:
# from spacy.lang.de.stop_words import STOP_WORDS
stopwords = nltk.corpus.stopwords.words('german')
tokens = [token for token in tokens if token not in stopwords]
return tokens
# How I intend to use it
transformer = TfidfVectorizer(tokenizer=tokenize)
example = "Jochen Schweizer ist eines der interessantesten Unternehmen der Welt, hat den Sitz allerdings nicht in der Schweizerischen Eidgenossenschaft."
transformer.fit([example])
# Example of the tokenizer
print(tokenize(example))
这个分词器的一个缺陷是它会拆分属于一起的单词:"Jochen Schweizer" 和 "schweizerische Eidgenossenschaft"。还缺少词形还原(词干提取)。我想获得以下代币:
["Jochen Schweizer", "interessantesten", "unternehmen", "Welt", "Sitz", "allerdings", "nicht", "Schweizerische Eidgenossenschaft"]
我知道 Spacy 可以识别那些命名实体(NER):
import en_core_web_sm # python -m spacy download en_core_web_sm --user
parser = en_core_web_sm.load()
doc = parser(example)
print(doc.ents) # (Jochen Schweizer, Welt, Sitz)
是否有使用 spacy 以将命名实体词保持在一起的方式进行标记化的好方法?
这个怎么样:
with doc.retokenize() as retokenizer:
for ent in doc.ents:
retokenizer.merge(doc[ent.start:ent.end])
事实上,您可以使用 spacy 去除标点符号和停用词,并进行词形还原!
parser = spacy.load('de_core_news_sm')
def tokenize(text):
doc = parser(text)
with doc.retokenize() as retokenizer:
for ent in doc.ents:
retokenizer.merge(doc[ent.start:ent.end], attrs={"LEMMA": ent.text})
return [x.lemma_ for x in doc if not x.is_punct and not x.is_stop]
示例:
>>> text = "Jochen Schweizer ist eines der interessantesten Unternehmen der Welt, hat den Sitz allerdings nicht in der Schweizerischen Eidgenossenschaft."
>>> print(tokenize(text))
>>> [u'Jochen Schweizer', u'interessant', u'Unternehmen', u'Welt', u'Sitz', u'Schweizerischen Eidgenossenschaft']