如何對清單進行分類?

如何對清單進行分類?

我希望透過匹配某些字串來對列表進行分類/排序。我以前找不到解決方案,所以希望這種方法更容易。

範例列表:

[A]
The apple is the pomaceous fruit of the apple tree
Apples grow on deciduous trees which are large if grown from seed
Apples are an important ingredient in many desserts, such as apple pie
Puréed apples are generally known as apple sauce
A banana is an edible fruit produced by several kinds of large plants
Worldwide, there is no sharp distinction between "bananas" and "plantains"
The term "banana" is also used as the common name for the plants
Orange is the colour of saffron, pumpkins and apricots
The colour orange is named after the appearance of the ripe orange fruit
In ancient Egypt, artists used an orange mineral pigment called realgar
Apple, orange and banana smoothie
Eating an orange and banana exceed allowable sugar intake
Kale or borecole (Brassica oleracea Acephala Group) is a vegetable
Until the end of the Middle Ages, kale was one of the most common green vegetables

正在查找的字串以及它們將如何分類(不區分大小寫):

Apple = Apple
Apple Pie = Dessert
Banana = Banana
Orange = Orange
(anything not categorized) = Vegetables
(multiple found strings) = Multiple --> if this isn't possible it's fine

清單旁邊的欄位可能會顯示以下內容:

[B]
Apple
Apple
Pie
Apple
Banana
Banana
Banana
Orange
Orange
Orange
Multiple
Multiple
Vegetables
Vegetables

然後我就使用排序/過濾器。謝謝!

答案1

我將使用 Power Query 加載項解決此問題。需要幾個步驟才能到達那裡,但不需要編寫程式碼或更改輸入資料結構。

我已經建立了一個原型,您可以在我的 One Drive 中查看或下載它的「Power Query 演示 - 搜尋關鍵字清單並分類」:

https://onedrive.live.com/redir?resid=4FA287BBC10EC562%21398

基本上,我的技術是建立初步查詢來載入類別清單並分配一個虛擬合併鍵,然後使用虛擬合併鍵將其與要搜尋的文字合併。這會為每個輸入行 x 每個類別產生一行。然後我使用 Text.Contains 函數計算類別,最後使用 Group By 傳回原始行集。

此時,您將擁有一個標準化表,該表非常適合透過篩選或使用資料透視表和/或資料透視圖進行探索。

答案2

事實上,你希望它是動態的和分層的(蘋果派優先於蘋果),這使得它有點困難,但如果你願意對其進行靜態編程,你可以這樣做:

Row 1 - Your search text
Row 2 - Your result text

B1=Apple
B2=Apple
B3=If(Len($A2)>LEN(SUBTITUTE(LOWER($A2),LOWER(B$1),"")),B$2,"")
C1=Apple Pie
C2=Deserts
D1=Orange
D2=Orange
Drag B3 across and down

您正在做的是將“apple”的實例替換為任何內容,然後計算字母以查看是否少於原始字母。通常,這是區分大小寫的操作,但我首先使用了我要比較的小寫文字。如果該列搜尋文字被命中,這將在每個列中輸出結果文字。

若要合併層次結構,您可以將 B 的欄位已變更為 IF(LEN(C2)>0,"",NORMAL FORMULA),這樣,如果 C 欄位已經有值,則該欄位不會顯示 APPLE。 NORMAL FORMULA 只是上面 B3 的公式。

然後你可以使用 counta 來測量你有多少次點擊

=IF(COUNTA(B2:D2)=0,"Vegitables",IF(COUNTA(B2:D2)>1,"Multiple",B2&C2&D2))

如果有 0 個匹配項,則為蔬菜,如果有多個,則為多個,否則您將只填寫一個字段,這樣您就可以透過連接結果來獲得最終答案。

另外,我確實想出了一個公式,只需使用動態清單即可計算出您有多少點擊次數。這是一個陣列函數,因此您必須在不帶 {} 的情況下鍵入它,然後不要按 Enter 鍵,而是按 ctrl+shift+enter

{=SUM(--(LEN(A2)-LEN(SUBSTITUTE(LOWER(A2),LOWER($F$1:$F$6),""))>0))}

雖然這會失敗,因為對於任何包含「蘋果派」的東西都會失敗,因為它同時包含蘋果和派,但它會成功,因為它可以處理 F 列中提供的動態清單。

相關內容