我创建了一个函数,将语法特征返回到一组单词:
import nltk.tokenize
from io import StringIO
def get_pos_tag(string):
detM =['un','le']
nomM =['garçon','verre','chair']
#Entréé
test = nltk.word_tokenize(string)
#Pos-Tag de chaque entréé
for i in range(0,len(test)):
#Déterminant masculin singulier
if test[i] in detM:
CAT = "Det"
Nb = "Sg"
GND = "M"
return(test[i],":","CAT:",CAT,",","Genre:",GND,",","Nombre:",Nb)
#Nom Masculin Singulier
elif test[i] in nomM:
CAT = "N"
Nb = "Sg"
GND = "M"
return(test[i],":","CAT:",CAT,",","Genre:",GND,",","Nombre:",Nb)
现在在另一个脚本中,当我想将函数的输出保存到字符串或列表时,这就是我得到的:
>>>import PosTag
>>> var1=PosTag.get_pos_tag("un garçon")
un : CAT: Det , Genre: M , Nombre: Sg
garçon : CAT: N , Genre: M , Nombre: Sg
>>> print (var1)
None
>>> var2=[]
>>> var2.append(PosTag.get_pos_tag("un garçon"))
un : CAT: Det , Genre: M , Nombre: Sg
garçon : CAT: N , Genre: M , Nombre: Sg
>>> print(var2)
[None]
我需要将结果存储在变量中以便下次使用它。
也许您正在寻找yield
关键字。收益率实质上将您的函数转换为一个生成器,该函数将保持返回值,直到您到达终点。
def get_pos_tag(string):
detM =['un','le']
nomM =['garçon','verre','chair']
#Entréé
test = nltk.word_tokenize(string)
#Pos-Tag de chaque entréé
for i in range(0,len(test)):
#Déterminant masculin singulier
if test[i] in detM:
CAT = "Det"
Nb = "Sg"
GND = "M"
yield test[i],":","CAT:",CAT,",","Genre:",GND,",","Nombre:",Nb
#Nom Masculin Singulier
elif test[i] in nomM:
CAT = "N"
Nb = "Sg"
GND = "M"
yield test[i],":","CAT:",CAT,",","Genre:",GND,",","Nombre:",Nb
您可以对此进行迭代,或将其直接转换为列表:
for val in get_pos_tag(string):
print(val)
# or
print(list(get_pos_tag(string)))
此外,文件末尾的return get_pos_tag(string)
(在所有其他函数之外)实际上并没有做任何事情(我不确定它是否有效)。
问题澄清旧答案:
这是因为你没有从get_pos_tag()
中返回任何东西,只是调用print
。 print()
函数不会传输任何值,只是显示它们。
无论你有print()
功能,用return
替换它。
任务的正确数据结构不是字符串列表,而是字典字典。
def get_pos_tag(s):
def d(e):
if e in ['un','le']:
return {'CAT':'Det', 'Genre':'M', 'Nombre':'Sg'}
if e in ['garçon','verre','chair']:
return {'CAT':'N', 'Genre':'M', 'Nombre':'Sg'}
return {entréé:d(entréé) for entréé in s.split()}
作为使用示例:
d = get_pos_tag("un garçon")
for k in d:
print(k, d[k])
产量
un {'CAT': 'Det', 'Genre': 'M', 'Nombre': 'Sg'}
garçon {'CAT': 'N', 'Genre': 'M', 'Nombre': 'Sg'}
和
print(d['un']['Genre'])
产量
M
ps - 为了测试我的解决方案,我用nltk.word_tokenize
替换了s.split
(我没有安装)。