Spacy 中有二元组和三元组功能吗?
Is there a bi gram or tri gram feature in Spacy?
下面的代码将句子分解成单独的标记,输出如下
"cloud" "computing" "is" "benefiting" " major" "manufacturing" "companies"
import en_core_web_sm
nlp = en_core_web_sm.load()
doc = nlp("Cloud computing is benefiting major manufacturing companies")
for token in doc:
print(token.text)
我最理想的是一起阅读 'cloud computing',因为它在技术上是一个单词。
基本上我在找一个双克。 Spacy 中是否有任何允许 Bi gram 或 Tri gram 的功能?
Spacy 允许检测名词块。因此,要将您的名词短语解析为单个实体,请执行以下操作:
检测名词块
https://spacy.io/usage/linguistic-features#noun-chunks
合并名词块
再次进行依赖解析,现在它会将“云计算”解析为单个实体。
>>> import spacy
>>> nlp = spacy.load('en')
>>> doc = nlp("Cloud computing is benefiting major manufacturing companies")
>>> list(doc.noun_chunks)
[Cloud computing, major manufacturing companies]
>>> for noun_phrase in list(doc.noun_chunks):
... noun_phrase.merge(noun_phrase.root.tag_, noun_phrase.root.lemma_, noun_phrase.root.ent_type_)
...
Cloud computing
major manufacturing companies
>>> [(token.text,token.pos_) for token in doc]
[('Cloud computing', 'NOUN'), ('is', 'VERB'), ('benefiting', 'VERB'), ('major manufacturing companies', 'NOUN')]
我有一个类似的问题(二元组,三元组,就像你的“云计算”)。我做了一个简单的 n-gram 列表,word_3gram、word_2grams 等,以克为基本单位 (cloud_computing)。
假设我有一句话“我喜欢云计算,因为它很便宜”。 sentence_2gram 是:“I_like”、“like_cloud”、“cloud_computing”、“computing_because” ...比较你的二元列表只有“cloud_computing" 被识别为有效的二元语法;句子中的所有其他二元组都是人为的。要恢复所有其他单词,您只需使用其他单词的第一部分,
"I_like".split("_")[0] -> I;
"like_cloud".split("_")[0] -> like
"cloud_computing" -> in bigram list, keep it.
skip next bi-gram "computing_because" ("computing" is already used)
"because_it's".split("_")[0]" -> "because" etc.
为了同时捕获句子中的最后一个词(“便宜”),我添加了标记“EOL”。我在 python 中实现了这个,速度还可以(3 分钟内 500k 字),i5 处理器,8G。无论如何,你只需要做一次。我发现这比官方(spacy 风格)块方法更直观。它也适用于非 spacy 框架。
我在官方 tokenization/lemmatization 之前就这样做了,因为你会得到“云计算”作为可能的二元组。但我不确定这是否是 best/right 方法。
如果你有spacydoc
,可以传给textacy:
ngrams = list(textacy.extract.basics.ngrams(doc, 2, min_freq=2))
警告:这只是 Zuzana 做出的正确答案的扩展。
我的声誉不允许我发表评论,所以我做这个回答只是为了回答上面 Adit Sanghvi 的问题:当你有一个文件列表时你是怎么做的?
1.-首先您需要创建一个包含文档文本的列表
2.-然后您将文本列表加入到一个文档中
3.-现在您使用 spacy 解析器将文本文档转换为 Spacy 文档
4.-你使用 Zuzana 的答案来创建 de bigrams
这是示例代码:
第 1 步
doc1 = ['all what i want is that you give me back my code because i worked a lot on it. Just give me back my code']
doc2 = ['how are you? i am just showing you an example of how to make bigrams on spacy. We love bigrams on spacy']
doc3 = ['i love to repeat phrases to make bigrams because i love make bigrams']
listOfDocuments = [doc1,doc2,doc3]
textList = [''.join(textList) for text in listOfDocuments for textList in text]
print(textList)
这将打印此文本:
['all what i want is that you give me back my code because i worked a lot on it. Just give me back my code', 'how are you? i am just showing you an example of how to make bigrams on spacy. We love bigrams on spacy', 'i love to repeat phrases to make bigrams because i love make bigrams']
然后第 2 步和第 3 步:
doc = ' '.join(textList)
spacy_doc = parser(doc)
print(spacy_doc)
并将打印:
我只想要你把我的代码还给我,因为我在上面做了很多工作。把我的代码还给我你好吗?我只是向您展示如何在 spacy 上制作双字母组的示例。我们喜欢 spacy 上的 bigrams 我喜欢重复短语来制作 bigrams 因为我喜欢制作 bigrams
最后是第 4 步(Zuzana 的回答)
ngrams = list(textacy.extract.ngrams(spacy_doc, 2, min_freq=2))
print(ngrams)
将打印此:
[制作双字母,制作双字母,制作双字母]
下面的代码将句子分解成单独的标记,输出如下
"cloud" "computing" "is" "benefiting" " major" "manufacturing" "companies"
import en_core_web_sm
nlp = en_core_web_sm.load()
doc = nlp("Cloud computing is benefiting major manufacturing companies")
for token in doc:
print(token.text)
我最理想的是一起阅读 'cloud computing',因为它在技术上是一个单词。
基本上我在找一个双克。 Spacy 中是否有任何允许 Bi gram 或 Tri gram 的功能?
Spacy 允许检测名词块。因此,要将您的名词短语解析为单个实体,请执行以下操作:
检测名词块 https://spacy.io/usage/linguistic-features#noun-chunks
合并名词块
再次进行依赖解析,现在它会将“云计算”解析为单个实体。
>>> import spacy
>>> nlp = spacy.load('en')
>>> doc = nlp("Cloud computing is benefiting major manufacturing companies")
>>> list(doc.noun_chunks)
[Cloud computing, major manufacturing companies]
>>> for noun_phrase in list(doc.noun_chunks):
... noun_phrase.merge(noun_phrase.root.tag_, noun_phrase.root.lemma_, noun_phrase.root.ent_type_)
...
Cloud computing
major manufacturing companies
>>> [(token.text,token.pos_) for token in doc]
[('Cloud computing', 'NOUN'), ('is', 'VERB'), ('benefiting', 'VERB'), ('major manufacturing companies', 'NOUN')]
我有一个类似的问题(二元组,三元组,就像你的“云计算”)。我做了一个简单的 n-gram 列表,word_3gram、word_2grams 等,以克为基本单位 (cloud_computing)。
假设我有一句话“我喜欢云计算,因为它很便宜”。 sentence_2gram 是:“I_like”、“like_cloud”、“cloud_computing”、“computing_because” ...比较你的二元列表只有“cloud_computing" 被识别为有效的二元语法;句子中的所有其他二元组都是人为的。要恢复所有其他单词,您只需使用其他单词的第一部分,
"I_like".split("_")[0] -> I;
"like_cloud".split("_")[0] -> like
"cloud_computing" -> in bigram list, keep it.
skip next bi-gram "computing_because" ("computing" is already used)
"because_it's".split("_")[0]" -> "because" etc.
为了同时捕获句子中的最后一个词(“便宜”),我添加了标记“EOL”。我在 python 中实现了这个,速度还可以(3 分钟内 500k 字),i5 处理器,8G。无论如何,你只需要做一次。我发现这比官方(spacy 风格)块方法更直观。它也适用于非 spacy 框架。
我在官方 tokenization/lemmatization 之前就这样做了,因为你会得到“云计算”作为可能的二元组。但我不确定这是否是 best/right 方法。
如果你有spacydoc
,可以传给textacy:
ngrams = list(textacy.extract.basics.ngrams(doc, 2, min_freq=2))
警告:这只是 Zuzana 做出的正确答案的扩展。
我的声誉不允许我发表评论,所以我做这个回答只是为了回答上面 Adit Sanghvi 的问题:当你有一个文件列表时你是怎么做的?
1.-首先您需要创建一个包含文档文本的列表 2.-然后您将文本列表加入到一个文档中 3.-现在您使用 spacy 解析器将文本文档转换为 Spacy 文档 4.-你使用 Zuzana 的答案来创建 de bigrams
这是示例代码:
第 1 步
doc1 = ['all what i want is that you give me back my code because i worked a lot on it. Just give me back my code']
doc2 = ['how are you? i am just showing you an example of how to make bigrams on spacy. We love bigrams on spacy']
doc3 = ['i love to repeat phrases to make bigrams because i love make bigrams']
listOfDocuments = [doc1,doc2,doc3]
textList = [''.join(textList) for text in listOfDocuments for textList in text]
print(textList)
这将打印此文本:
['all what i want is that you give me back my code because i worked a lot on it. Just give me back my code', 'how are you? i am just showing you an example of how to make bigrams on spacy. We love bigrams on spacy', 'i love to repeat phrases to make bigrams because i love make bigrams']
然后第 2 步和第 3 步:
doc = ' '.join(textList)
spacy_doc = parser(doc)
print(spacy_doc)
并将打印:
我只想要你把我的代码还给我,因为我在上面做了很多工作。把我的代码还给我你好吗?我只是向您展示如何在 spacy 上制作双字母组的示例。我们喜欢 spacy 上的 bigrams 我喜欢重复短语来制作 bigrams 因为我喜欢制作 bigrams
最后是第 4 步(Zuzana 的回答)
ngrams = list(textacy.extract.ngrams(spacy_doc, 2, min_freq=2))
print(ngrams)
将打印此:
[制作双字母,制作双字母,制作双字母]