Я хочу запустить алгоритм машинного обучения, используя django, но django не использует путь к файлу csv - PullRequest
0 голосов
/ 09 апреля 2019

Я создаю систему обнаружения спама в django в своем приложении с домашней страницы, я введу любую строку, и эта строка перейдет в функцию ml, и эта функция вернет либо строку, либо spam, либо ham, и этот результат будет напечатан на следующей странице, но я не может определить pata файла csv в функции pd.read_csv. это показывает, что ошибка "../data/spam.csv" не существует: b "../ data / spam.csv '

view.py file

def hompage(request):
    form = DetectForm(request.POST)
    return render(request, 'index.html', {'form': form})


def result(request): 
    form=DetectForm(request.POST)
    if form.is_valid():
        x=form.cleaned_data['msg']
        y=machine(x)
    return render(request, 'result.html',{'msg':y})

файл ml.py

    def machine(stringx):
        import pandas as pd
        import numpy as np
        import re
        from nltk.stem.porter import PorterStemmer
        from nltk.corpus import stopwords

        data = pd.read_csv('../data/spam.csv', encoding='latin-1')
        data = data.iloc[:, [0, 1]]
        data['v1'] = data.v1.map({'ham': 0, 'spam': 1})

        courpas = []
        # data_cleaning
        string = stringx
        df2 = pd.DataFrame({"v1": [0],
                            "v2": [string]})
        data = data.append(df2, ignore_index=True)

        # data_cleaning
        for a in data['v2']:
            review = re.sub('[^a-zA-Z]', ' ', a)
            review = review.lower()
            review = review.split()
            ps = PorterStemmer()
            review = [ps.stem(x) for x in review if not x in stopwords.words('english')]
            review = ' '.join(review)
            courpas.append(review)

        # create a bag of word model
        from sklearn.feature_extraction.text import CountVectorizer

        cv = CountVectorizer(max_features=5000)
        x = cv.fit_transform(courpas).toarray()
        y = data.iloc[:, 0].values
        x_train, ytrain = x[:-1], y[:-1]
        x_test, y_test = x[5572:5573], y[5572:5573]
        from sklearn.model_selection import train_test_split
        from sklearn.naive_bayes import GaussianNB

        classifier = GaussianNB()
        classifier.fit(x_train, ytrain)
        y_pred = classifier.predict(x_test)

        if y_pred == 1:
            return 'spam'

        else:
            return 'ham'

файл result.html

{% block title %}
    <h2>Result</h2>
    {% endblock %}

    {% block content %}
    <p>{{msg}}</p>
        {% endblock %}

файл url.py

    from django.conf.urls import url
    from . import  views
    from django.urls import path

    app_name = "spam"
    urlpatterns=[
    url(r'^',views.hompage,name='hompage'),

    ]

1 Ответ

0 голосов
/ 09 апреля 2019

, если папка данных является корневым каталогом проекта, тогда

data = pd.read_csv('data/spam.csv', encoding='latin-1') сделает работу

или вы можете создать путь, используя переменную BASE_DIR, используя

затем используйте эту переменную в ваших представлениях

data_dir = os.path.join(BASE_DIR, 'data') # place this in settings.py


в просмотрах

from django.conf import settings
data = pd.read_csv(settings.data_dir + 'spam.csv', encoding='latin-1')
...