crfsuite icon indicating copy to clipboard operation
crfsuite copied to clipboard

Python Swig: SystemError: <built-in function delete_Item> returned a result with an error set

Open binhnq94 opened this issue 8 years ago • 2 comments

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)

binhnq94 avatar Aug 13 '16 09:08 binhnq94

Was there ever a solution to this problem? I am having a very similar one...

ralphsb avatar Jan 09 '18 20:01 ralphsb

Same here.

alexxbb avatar Sep 09 '20 19:09 alexxbb