Skip to content
Snippets Groups Projects
Commit eb37d7b8 authored by 宝俊 黄's avatar 宝俊 黄
Browse files

Merge branch '201250084' into 'master'

创建了数据挖掘相关部分内容

See merge request 0010-qingyun/backend!13
parents c76d6213 b51bd33b
No related branches found
Tags v1.0.31
No related merge requests found
Pipeline #63419 passed
Showing
with 345 additions and 15 deletions
No preview for this file type
......@@ -22,7 +22,7 @@
<artifactId>sentistrength_backend</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/sentiStrength-v1.0.14.jar</systemPath>
<systemPath>${project.basedir}/lib/sentiStrength-v1.0.15.jar</systemPath>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
......
......@@ -2,28 +2,18 @@ package com.sentistrength.enums;
public enum ClassificationMode implements BaseEnum<ClassificationMode, String>{
SCALE("scale"),
BINARY("binary"),
TRINARY("trinary");
SCALE("SCALE"),
BINARY("BINARY"),
TRINARY("TRINARY"),
POSNEG("POSNEG");
/**
* 类成员变量 value String类型<br/>
* 枚举的值
*/
private final String value;
/**
* 构造方法,以字符串作为枚举的值进行构造
*
* @param value 枚举的值
*/
ClassificationMode(String value) {
this.value = value;
}
/**
* 获取枚举的值
*
* @return 枚举的值
*/
@Override
......
package com.sentistrength.model.vo.dataMining;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class CalculateInformationGainFileVO {
private List<String> inFile;
}
package com.sentistrength.model.vo.dataMining;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CombineTwoArffsVO {
private List<String> inFile1;
private List<String> inFile2;
}
package com.sentistrength.model.vo.dataMining;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ConvertSentimentTextToArffVO {
private String inFileName;
private List<String> inFile;
private int minFeatureFrequency;
private boolean headerLine;
private String mode;
private int ngram;
}
package com.sentistrength.model.vo.dataMining;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class DeleteColAndMoveVO {
private List<String> inFile;
private int colToDelete;
}
package com.sentistrength.model.vo.dataMining;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class MergeLabelledAndUnlabelledVO {
private List<String> labelledFile;
private List<String> unlabelledFile;
}
package com.sentistrength.model.vo.dataMining;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class MoveColumnVO {
private List<String> inFile;
private int colToMove;
}
package com.sentistrength.model.vo.dataMining;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class RemoveDataColumnVO {
private List<String> inFile;
private int colToRemove;
}
package com.sentistrength.model.vo.dataMining;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class SelectTopNFeaturesVO {
private List<String> inFile;
private int topN;
}
package com.sentistrength.model.vo.dataMining;
import com.sentistrength.enums.ClassificationMode;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class SetOptionsVO {
private boolean includeEmoticons;
private boolean includeIncorrectSpellings;
private String mode;
}
package com.sentistrength.service.Impl.dataMining;
import com.sentistrength.enums.ClassificationMode;
import com.sentistrength.model.vo.dataMining.*;
import com.sentistrength.service.Interface.dataMining.DataMiningService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import uk.ac.wlv.sentistrength.ClassificationOptions;
import uk.ac.wlv.sentistrength.ClassificationResources;
import uk.ac.wlv.sentistrength.TextParsingOptions;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class DataMiningServiceImpl implements DataMiningService {
private TextParsingOptions textParsingOptions;
private ClassificationOptions classificationOptions;
private ClassificationResources classificationResources;
private ClassificationMode mode;
private Map<ClassificationMode,Integer> map;
@Autowired
public DataMiningServiceImpl(){
textParsingOptions = new TextParsingOptions();
classificationOptions = new ClassificationOptions();
classificationResources = new ClassificationResources();
map = new HashMap<ClassificationMode,Integer>();
map.put(ClassificationMode.SCALE,1);
map.put(ClassificationMode.BINARY,2);
map.put(ClassificationMode.TRINARY,3);
map.put(ClassificationMode.POSNEG,4);
}
@Override
public List<String> convertSentimentTextToArff(ConvertSentimentTextToArffVO convertSentimentTextToArffVO) {
List<String> outFile;
textParsingOptions.igNgramSize = convertSentimentTextToArffVO.getNgram();
outFile = uk.ac.wlv.wkaclass.Arff.convertSentimentTextToArff(convertSentimentTextToArffVO.getInFileName(),convertSentimentTextToArffVO.getInFile(),
convertSentimentTextToArffVO.isHeaderLine(),textParsingOptions,classificationOptions,classificationResources,map.get(ClassificationMode.valueOf(convertSentimentTextToArffVO.getMode())),
convertSentimentTextToArffVO.getMinFeatureFrequency(),null);
return outFile;
}
@Override
public List<String> combineTwoArffs(CombineTwoArffsVO combineTwoArffsVO) {
List<String> outFile;
outFile = uk.ac.wlv.wkaclass.Arff.combineTwoArffs(combineTwoArffsVO.getInFile1(),combineTwoArffsVO.getInFile2(),false);
return outFile;
}
@Override
public List<String> removeDataColumn(RemoveDataColumnVO removeDataColumnVO) {
List<String> outFile;
outFile = uk.ac.wlv.wkaclass.Arff.deleteColumnFromArff(removeDataColumnVO.getInFile(),removeDataColumnVO.getColToRemove());
return outFile;
}
@Override
public List<String> moveColumn(MoveColumnVO moveColumnVO) {
List<String> outFile;
outFile = uk.ac.wlv.wkaclass.Arff.moveColumnToEndOfArff(moveColumnVO.getInFile(),moveColumnVO.getColToMove());
return outFile;
}
@Override
public List<String> deleteColAndMove(DeleteColAndMoveVO deleteColAndMoveVO) {
List<String> outFile;
outFile = uk.ac.wlv.wkaclass.Arff.deleteColAndMoveRemainingFirstColToEnd(deleteColAndMoveVO.getInFile(),deleteColAndMoveVO.getColToDelete());
return outFile;
}
@Override
public List<Double> calculateInformationGain(CalculateInformationGainFileVO calculateInformationGainFileVO) {
int[] iAttData = uk.ac.wlv.wkaclass.Arff.countAttributesAndDataInArff(calculateInformationGainFileVO.getInFile());
int iAttributeCount = iAttData[0];
int iDataCount = iAttData[1];
int[][] iData = new int[iAttributeCount + 1][iDataCount + 1];
double[] fColIG = new double[iAttributeCount + 1];
String[] sAttributes = new String[iAttributeCount + 1];
uk.ac.wlv.wkaclass.Arff.readArffAttributesAndData(calculateInformationGainFileVO.getInFile(), iAttributeCount, iDataCount, sAttributes, iData);
uk.ac.wlv.wkaclass.Arff.calculateInformationGainOfData(iData,iAttributeCount,iDataCount,fColIG);
return Arrays.stream(fColIG).boxed().collect(Collectors.toList());
}
@Override
public List<String> selectTopNFeatures(SelectTopNFeaturesVO selectTopNFeaturesVO) {
List<String> outFile;
outFile = uk.ac.wlv.wkaclass.Arff.makeArffWithTopNAttributes(selectTopNFeaturesVO.getInFile(),selectTopNFeaturesVO.getTopN());
return outFile;
}
@Override
public void setOptions(SetOptionsVO setOptionsVO) {
classificationOptions.bgUseEmoticons = setOptionsVO.isIncludeEmoticons();
classificationOptions.bgCorrectSpellingsUsingDictionary = setOptionsVO.isIncludeIncorrectSpellings();
mode = ClassificationMode.valueOf(setOptionsVO.getMode());
}
@Override
public List<String> mergeLabelledAndUnlabelled(MergeLabelledAndUnlabelledVO mergeLabelledAndUnlabelledVO) {
List<String> outFile;
outFile = uk.ac.wlv.wkaclass.Arff.mergeLabelledAndUnlabelledTextFiles(mergeLabelledAndUnlabelledVO.getLabelledFile(),mergeLabelledAndUnlabelledVO.getUnlabelledFile());
return outFile;
}
}
package com.sentistrength.service.Interface.dataMining;
import com.sentistrength.model.vo.dataMining.*;
import java.util.List;
import java.util.ListIterator;
public interface DataMiningService {
List<String> convertSentimentTextToArff(ConvertSentimentTextToArffVO convertSentimentTextToArffVO);
List<String> combineTwoArffs(CombineTwoArffsVO combineTwoArffsVO);
List<String> removeDataColumn(RemoveDataColumnVO removeDataColumnVO);
List<String> moveColumn(MoveColumnVO moveColumnVO);
List<String> deleteColAndMove(DeleteColAndMoveVO deleteColAndMoveVO);
List<Double> calculateInformationGain(CalculateInformationGainFileVO calculateInformationGainFileVO);
List<String> selectTopNFeatures(SelectTopNFeaturesVO selectTopNFeaturesVO);
void setOptions(SetOptionsVO setOptionsVO);
List<String> mergeLabelledAndUnlabelled(MergeLabelledAndUnlabelledVO mergeLabelledAndUnlabelledVO);
}
package com.sentistrength.web.controller.dataMining;
import com.sentistrength.model.vo.dataMining.*;
import com.sentistrength.service.Interface.dataMining.DataMiningService;
import com.sentistrength.web.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping(path = "/dataMining")
public class DataMiningController {
private DataMiningService dataMiningService;
@Autowired
public DataMiningController(DataMiningService dataMiningService){
this.dataMiningService = dataMiningService;
}
@PostMapping("/convertSentimentTextToArff")
public Response convertSentimentTextToArff(@RequestBody ConvertSentimentTextToArffVO convertSentimentTextToArffVO){
return Response.buildSuccess(dataMiningService.convertSentimentTextToArff(convertSentimentTextToArffVO));
}
@PostMapping("/combineTwoArffs")
public Response combineTwoArffs(@RequestBody CombineTwoArffsVO combineTwoArffsVO){
return Response.buildSuccess(dataMiningService.combineTwoArffs(combineTwoArffsVO));
}
@PostMapping("/removeDataColumn")
public Response removeDataColumn(@RequestBody RemoveDataColumnVO removeDataColumnVO) {
return Response.buildSuccess(dataMiningService.removeDataColumn(removeDataColumnVO));
}
@PostMapping("moveColumn")
public Response moveColumn(@RequestBody MoveColumnVO moveColumnVO){
return Response.buildSuccess(dataMiningService.moveColumn(moveColumnVO));
}
@PostMapping("deleteColAndMove")
public Response deleteColAndMove(@RequestBody DeleteColAndMoveVO deleteColAndMoveVO){
return Response.buildSuccess(dataMiningService.deleteColAndMove(deleteColAndMoveVO));
}
@PostMapping("/calculateInformationGain")
public Response calculateInformationGain(@RequestBody CalculateInformationGainFileVO calculateInformationGainFileVO){
return Response.buildSuccess(dataMiningService.calculateInformationGain(calculateInformationGainFileVO));
}
@PostMapping("/selectTopNFeatures")
public Response selectTopNFeatures(@RequestBody SelectTopNFeaturesVO selectTopNFeaturesVO){
return Response.buildSuccess(dataMiningService.selectTopNFeatures(selectTopNFeaturesVO));
}
@PostMapping ("/setOptions")
public Response setOptions(@RequestBody SetOptionsVO setOptionsVO){
dataMiningService.setOptions(setOptionsVO);
return Response.buildSuccess();
}
@PostMapping("/mergeUnlabelledAndLabelled")
public Response mergeUnlabelledAndLabelled(@RequestBody MergeLabelledAndUnlabelledVO mergeLabelledAndUnlabelledVO){
return Response.buildSuccess(dataMiningService.mergeLabelledAndUnlabelled(mergeLabelledAndUnlabelledVO));
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment