iT邦幫忙

0

想請教python做到批量輸入與匯出該如何調整程式?

  • 分享至 

  • xImage

各位先進們好,近期研究文本分類,想知道是否有方式可修改為大量輸入與匯出?

1

!pip install scikit-learn
!pip install pandas

2

import pandas as pd
read = pd.read_excel("20200824142914.xlsx").values.tolist()
corpus = [row[0] for row in read]
intents = [row[1] for row in read]

3

from sklearn.feature_extraction.text import CountVectorizer
feature_extractor = CountVectorizer(
            analyzer="word", ngram_range=(1, 2), binary=True,
            token_pattern=r'([a-zA-Z]+|\w)')
X = feature_extractor.fit_transform(corpus)

4

from sklearn.linear_model import LogisticRegression
INTENT_CLASSIFY_REGULARIZATION = "l2"

lr = LogisticRegression(penalty=INTENT_CLASSIFY_REGULARIZATION,
                                         class_weight='balanced')
lr.fit(X, intents)

5

user_input = ['查詢明天的降雨量']
X2 = feature_extractor.transform(user_input)

6

lr.predict(X2)

7

probs = lr.predict_proba(X2)[0]
for predict_intent, prob in sorted(zip(lr.classes_, probs), key = lambda x: x[1],reverse = True):
    print(predict_intent, prob)
obarisk iT邦研究生 1 級 ‧ 2022-08-03 08:19:24 檢舉
一定有啊...
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
I code so I am
iT邦高手 1 級 ‧ 2022-08-03 08:20:37
最佳解答

user_input = ['查詢明天的降雨量'] 改為多筆即可,例如:

user_input = ['查詢明天的降雨量', '查詢後天的降雨量'] 
看更多先前的回應...收起先前的回應...

您好,想知道除此之外~是否有例如透過匯入excel、text等文本的方法呢?
自己嘗試過調整但是都錯誤,謝謝您!

建立一個只有一個欄位的 Excel 檔案,利用下列程式碼讀入:

import pandas as pd
df=pd.read_excel('test.xlsx')
user_input = df.values

之後照做即可。

您好,抱歉嘗試了一天還是無法成功執行,會出現AttributeError: 'numpy.ndarray' object has no attribute 'lower'
不知道我哪邊出了錯誤~

我有更新目前我的所有程式碼,若前輩願意在懇請次指點,感謝

請利用程式區塊框起來,並附上資料,別人才可以迅速幫你解決問題。

您好,已更新內文!

我是將您建議的
import pandas as pd df=pd.read_excel('test.xlsx') user_input = df.values
加入第5段的程式碼做調整,但是會出現AttributeError: 'numpy.ndarray' object has no attribute 'lower'

修改如下:

import pandas as pd
df = pd.read_excel("20200824142914.xlsx")

from sklearn.feature_extraction.text import CountVectorizer
feature_extractor = CountVectorizer(
            analyzer="word", ngram_range=(1, 2), binary=True,
            token_pattern=r'([a-zA-Z]+|\w)')
X = feature_extractor.fit_transform(df.語句.values)
X.shape

# 意圖 轉為代碼
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
intents = encoder.fit_transform(df.意圖)

# 訓練
from sklearn.linear_model import LogisticRegression
INTENT_CLASSIFY_REGULARIZATION = "l2"

lr = LogisticRegression(penalty=INTENT_CLASSIFY_REGULARIZATION,
                                         class_weight='balanced')
lr.fit(X, intents)

# 大量測試
df_input = pd.read_excel("test_data.xlsx")
user_input = df_input.iloc[:,0].values
X2 = feature_extractor.transform(user_input)
print(lr.predict(X2))
print(encoder.classes_[lr.predict(X2)])

test_data.xlsx 為 20200824142914.xlsx 第一欄,如下圖,你可以任意修改資料。
https://ithelp.ithome.com.tw/upload/images/20220805/20001976eg4nv3KQ24.png

了解,針對您提供的協助,後續我會自己鑽研調整,感謝您的指導!

感謝分享

0
lsesroom
iT邦新手 2 級 ‧ 2022-08-03 09:14:21

你把要分析的語句做成excel或text檔案。
把檔案讀進來後,用迴圈跑你PO的範例網頁中"預測"的部分。
在這個迴圈中跑分析,然後把結果存到另一個檔案或直接秀出來就可以了不是嗎?

如果看不懂我寫的怎麼做的話,我覺得你需要更扎實的基礎程式設計練習。或是拿錢出來請人做比較快,真的!XD

很抱歉...我懂你的意思,但是功力不足!嘗試幾次還是無法成功,才上來發問

我要發表回答

立即登入回答