crfsuite
crfsuite copied to clipboard
Python Swig: SystemError: <built-in function delete_Item> returned a result with an error set
crfsuite version = 0.12
StopIteration
During handling of the above exception, another exception occurred:
SystemError: <built-in function delete_ItemSequence> returned a result with an error set
During handling of the above exception, another exception occurred:
SystemError: <built-in function delete_StringList> returned a result with an error set
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "..../train.py", line 73, in <module>
for xseq_, yseq_ in instances(fi_):
SystemError: <built-in function delete_Item> returned a result with an error set
my code:
#!/usr/bin/env python
import crfsuite
import sys
from xxxxx import config
import os.path
# Inherit crfsuite.Trainer to implement message() function, which receives
# progress messages from a training process.
class Trainer(crfsuite.Trainer):
def message(self, s):
# Simply output the progress messages to STDOUT.
sys.stdout.write(s)
def instances(fi):
xseq = crfsuite.ItemSequence()
yseq = crfsuite.StringList()
i = 0
for line in fi:
i += 1
print(i)
line = line.strip('\n')
if not line:
# An empty line presents an end of a sequence.
# if xseq:
yield xseq, tuple(yseq)
xseq = crfsuite.ItemSequence()
yseq = crfsuite.StringList()
continue
# Split the line with TAB characters.
fields = line.split('\t')
# Append attributes to the item.
item = crfsuite.Item()
for field in fields[1:]:
p = field.rfind(':')
if p == -1:
# Unweighted (weight=1) attribute.
item.append(crfsuite.Attribute(field))
else:
# Weighted attribute
item.append(crfsuite.Attribute(field[:p], float(field[p + 1:])))
# Append the item to the item sequence.
xseq.append(item)
# Append the label to the label sequence.
yseq.append(fields[0])
xseq.erase()
if __name__ == '__main__':
version = "_v1_python"
# This demonstrates how to obtain the version string of CRFsuite.
print("crfsuite version = ", crfsuite.version())
# Create a Trainer object.
trainer = Trainer()
# Read training instances from STDIN, and set them to trainer.
train_feature_file = config.train_feature_file+"_v1"
model_file = config.model_file+version
if not os.path.exists(train_feature_file):
raise FileNotFoundError("train_file: {} not found".format(train_feature_file))
if os.path.exists(model_file):
raise FileExistsError("model_file: {} have been existed".format(model_file))
with open(train_feature_file, 'r') as fi_:
for xseq_, yseq_ in instances(fi_):
trainer.append(xseq_, yseq_, 0)
# Use L2-regularized SGD and 1st-order dyad features.
trainer.select('l2sgd', 'crf1d')
# This demonstrates how to list parameters and obtain their values.
for name in trainer.params():
print(name, trainer.get(name), trainer.help(name))
# Set the coefficient for L2 regularization to 0.1
trainer.set('c2', '0.1')
# Start training; the training process will invoke trainer.message()
# to report the progress.
trainer.train(model_file, -1)
Was there ever a solution to this problem? I am having a very similar one...
Same here.