Python 熊猫系列.apply不';t工作由字符串组成
这似乎可能与日语问题有关, 所以我也问了 当我使用stringjust对象时,它工作得很好 我试图编码,但找不到这个错误的原因。 你能给我一些建议吗 MeCab是一个开放源码的文本分割库,最初由奈良科学技术研究所开发,目前由Taku Kudou维护,用于以日语编写的文本(工藤拓) 作为谷歌日语输入项目工作的一部分。 sample.csvPython 熊猫系列.apply不';t工作由字符串组成,python,python-3.x,pandas,mecab,Python,Python 3.x,Pandas,Mecab,这似乎可能与日语问题有关, 所以我也问了 当我使用stringjust对象时,它工作得很好 我试图编码,但找不到这个错误的原因。 你能给我一些建议吗 MeCab是一个开放源码的文本分割库,最初由奈良科学技术研究所开发,目前由Taku Kudou维护,用于以日语编写的文本(工藤拓) 作为谷歌日语输入项目工作的一部分。 sample.csv 0,今日も夜まで働きました。 1,オフィスには誰もいませんが、エラーと格闘中 2,デバッグばかりしていますが、どうにもなりません。 这是熊猫蟒蛇3的代码 i
0,今日も夜まで働きました。
1,オフィスには誰もいませんが、エラーと格闘中
2,デバッグばかりしていますが、どうにもなりません。
这是熊猫蟒蛇3的代码
import pandas as pd
import MeCab
# https://en.wikipedia.org/wiki/MeCab
from tqdm import tqdm_notebook as tqdm
# This is working...
df = pd.read_csv('sample.csv', encoding='utf-8')
m = MeCab.Tagger ("-Ochasen")
text = "りんごを食べました、そして、みかんも食べました"
a = m.parse(text)
print(a)# working!
# But I want to use Pandas's Series
def extractKeyword(text):
"""Morphological analysis of text and returning a list of only nouns"""
tagger = MeCab.Tagger('-Ochasen')
node = tagger.parseToNode(text)
keywords = []
while node:
if node.feature.split(",")[0] == u"名詞": # this means noun
keywords.append(node.surface)
node = node.next
return keywords
aa = extractKeyword(text) #working!!
me = df.apply(lambda x: extractKeyword(x))
#TypeError: ("in method 'Tagger_parseToNode', argument 2 of type 'char const *'", 'occurred at index 0')
这是跟踪错误
りんご リンゴ りんご 名詞-一般
を ヲ を 助詞-格助詞-一般
食べ タベ 食べる 動詞-自立 一段 連用形
まし マシ ます 助動詞 特殊・マス 連用形
た タ た 助動詞 特殊・タ 基本形
、 、 、 記号-読点
そして ソシテ そして 接続詞
、 、 、 記号-読点
みかん ミカン みかん 名詞-一般
も モ も 助詞-係助詞
食べ タベ 食べる 動詞-自立 一段 連用形
まし マシ ます 助動詞 特殊・マス 連用形
た タ た 助動詞 特殊・タ 基本形
EOS
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-174-81a0d5d62dc4> in <module>()
32 aa = extractKeyword(text) #working!!
33
---> 34 me = df.apply(lambda x: extractKeyword(x))
~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in apply(self, func, axis, broadcast, raw, reduce, args, **kwds)
4260 f, axis,
4261 reduce=reduce,
-> 4262 ignore_failures=ignore_failures)
4263 else:
4264 return self._apply_broadcast(f, axis)
~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in _apply_standard(self, func, axis, ignore_failures, reduce)
4356 try:
4357 for i, v in enumerate(series_gen):
-> 4358 results[i] = func(v)
4359 keys.append(v.name)
4360 except Exception as e:
<ipython-input-174-81a0d5d62dc4> in <lambda>(x)
32 aa = extractKeyword(text) #working!!
33
---> 34 me = df.apply(lambda x: extractKeyword(x))
<ipython-input-174-81a0d5d62dc4> in extractKeyword(text)
20 """Morphological analysis of text and returning a list of only nouns"""
21 tagger = MeCab.Tagger('-Ochasen')
---> 22 node = tagger.parseToNode(text)
23 keywords = []
24 while node:
~/anaconda3/lib/python3.6/site-packages/MeCab.py in parseToNode(self, *args)
280 __repr__ = _swig_repr
281 def parse(self, *args): return _MeCab.Tagger_parse(self, *args)
--> 282 def parseToNode(self, *args): return _MeCab.Tagger_parseToNode(self, *args)
283 def parseNBest(self, *args): return _MeCab.Tagger_parseNBest(self, *args)
284 def parseNBestInit(self, *args): return _MeCab.Tagger_parseNBestInit(self, *args)
TypeError: ("in method 'Tagger_parseToNode', argument 2 of type 'char const *'", 'occurred at index 0')w
りんご リンゴ りんご 名詞-一般
を ヲ を 助詞-格助詞-一般
食べ タベ 食べる 動詞-自立 一段 連用形
まし マシ ます 助動詞 特殊・マス 連用形
た タ た 助動詞 特殊・タ 基本形
、 、 、 記号-読点
そして ソシテ そして 接続詞
、 、 、 記号-読点
みかん ミカン みかん 名詞-一般
も モ も 助詞-係助詞
食べ タベ 食べる 動詞-自立 一段 連用形
まし マシ ます 助動詞 特殊・マス 連用形
た タ た 助動詞 特殊・タ 基本形
EOS
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
32 aa=提取关键字(文本)#正在工作!!
33
--->34 me=df.apply(λx:extractKeyword(x))
应用中的~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py(self、func、axis、broadcast、raw、reduce、args、**kwds)
轴线4260楼,
4261减少=减少,
->4262忽略故障=忽略故障)
4263其他:
4264返回自应用广播(f轴)
~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py在应用标准中(self、func、axis、忽略故障、reduce)
4356请尝试:
4357用于枚举中的i、v(系列):
->4358结果[i]=func(v)
4359键。追加(v.name)
4360例外情况除外,如e:
in(x)
32 aa=提取关键字(文本)#正在工作!!
33
--->34 me=df.apply(λx:extractKeyword(x))
在extractKeyword(文本)中
20“文本的形态分析并返回仅包含名词的列表”
21 tagger=MeCab.tagger('-Ochasen')
--->22节点=tagger.parsetNode(文本)
23关键字=[]
24 while节点:
parsetNode中的~/anaconda3/lib/python3.6/site-packages/MeCab.py(self,*args)
280 uuu repr uuuuu=u swig u repr
281 def parse(self,*args):返回_MeCab.Tagger_parse(self,*args)
-->282 def parseToNode(self,*args):返回_MeCab.Tagger_parseToNode(self,*args)
283 def parseNBest(self,*args):返回_MeCab.Tagger_parseNBest(self,*args)
284 def parseNBestInit(self,*args):返回_MeCab.Tagger_parseNBestInit(self,*args)
TypeError:(“在方法'Tagger_parseToNode'中,'char const*'类型的参数2,'在索引0处出现”)w
ParsetNode每次都失败,
所以需要把这个代码
tagger.parseToNode('dummy')
以前
node = tagger.parseToNode(text)
成功了
但我不知道原因,也许parseToNode方法有bug
def extractKeyword(text):
"""Morphological analysis of text and returning a list of only nouns"""
tagger = MeCab.Tagger('-Ochasen')
tagger.parseToNode('ダミー')
node = tagger.parseToNode(text)
keywords = []
while node:
if node.feature.split(",")[0] == u"名詞": # this means noun
keywords.append(node.surface)
node = node.next
return keywords
我知道你在日文StackOverflow上得到了一些帮助,但这里有一个英文答案: 首先要修复的是,
read\u csv
将example.csv的第一行作为标题。要解决此问题,请使用read\u csv
中的names
参数
接下来,df.apply
默认情况下将在数据帧的列上应用该函数。您需要执行类似于df.apply(lambda x:extractKeyword(x['String']),axis=1)的操作,但这不起作用,因为每个句子都有不同数量的名词,熊猫会抱怨它无法将1x2数组堆叠在1x5数组之上。最简单的方法是对字符串系列应用
最后一个问题是,MeCab Python3绑定中有一个bug:请参见通过运行两次parseToNode
找到了解决方法,您还可以在parseToNode
之前调用parse
把这三件事放在一起:
import pandas as pd
import MeCab
df = pd.read_csv('sample.csv', encoding='utf-8', names=['Number', 'String'])
def extractKeyword(text):
"""Morphological analysis of text and returning a list of only nouns"""
tagger = MeCab.Tagger('-Ochasen')
tagger.parse(text)
node = tagger.parseToNode(text)
keywords = []
while node:
if node.feature.split(",")[0] == u"名詞": # this means noun
keywords.append(node.surface)
node = node.next
return keywords
me = df['String'].apply(extractKeyword)
print(me)
运行此脚本时,请使用您提供的example.csv:
➜ python3 demo.py
0 [今日, 夜]
1 [オフィス, 誰, エラー, 格闘, 中]
2 [デバッグ]
Name: String, dtype: object
什么是标题
?你能从title
中提供一些输入吗?@Tai抱歉,不是title,所以我修正了它。你能显示完整堆栈跟踪错误日志吗?@dkato我粘贴跟踪错误日志确保。没问题。如果有更多信息更新,我会看看是否能帮上忙。祝你好运。还有github链接@YOSUKE也感谢你用英语写作,这是一个非常有趣的问题^^!